![]() |
|
||||||||||
|
|||||||
|
|
« Предыдущая тема | Следующая тема » |
| Опции темы | Опции просмотра |
|
![]() |
![]() |
|
|||||
|
Регистрация: Dec 2007
Сообщений: 21
|
Добрый день, только разбираюсь с AS3. Возможно вопрос мой туп, я наверное, даже посмеюсь над ним через пару недель, однако имею проблему. Я загружаю внещний ХМЛ, потом myLoader.addEventListener("complete", xmlLoaded); вызывает функцию хмлЛоадид, в ней я разбираю ХМЛ в массив, но вот как его вернуть в программу, для дальнейшей работы?
В функции я вроде предусмотрел возврат, но как присвоить результат ее выполнения новой переменной(массиву), а главное где это сделать, я не могу понять. Всем заранее спасибо. var myXML:XML = new XML(); var XML_URL:String = "MY_XML_FILE_PATH"; var myXMLURL:URLRequest = new URLRequest(XML_URL); var myLoader:URLLoader = new URLLoader(myXMLURL); myLoader.addEventListener("complete", xmlLoaded); function xmlLoaded(event:Event):Array { myXML = XML(myLoader.data); var videoArr:Array = new Array(); for(var i:int=0;i<myXML.children().length();i++) { videoArr[i] = [myXML.item[i].idVideo, myXML.item[i].nameVideo, myXML.item[i].urlVideo]; } //trace(videoArr.length); //Здесь все выводится нормально return videoArr; } |
|
|||||
|
И куда у тебя должен попасть массив?
Хендлер события, это не функция, а метод - вернуть какое-то значение он конечно может, но в пустоту. Можно только вызвать другую функцию, паредав значение, или же записать твой массив во внешнюю переменную, например: var myXML:XML = new XML(); var XML_URL:String = "MY_XML_FILE_PATH"; var myXMLURL:URLRequest = new URLRequest(XML_URL); var myLoader:URLLoader = new URLLoader(myXMLURL); public var videoArray:Array; myLoader.addEventListener("complete", xmlLoaded); function xmlLoaded(event:Event):void { myXML = XML(myLoader.data); var videoArr:Array = new Array(); for(var i:int=0;i<myXML.children().length();i++) { videoArr[i] = [myXML.item[i].idVideo, myXML.item[i].nameVideo, myXML.item[i].urlVideo]; } videoArray=videoArr; }
__________________
if (love is true) break my.heart; Последний раз редактировалось Rzer; 23.04.2009 в 00:45. |
|
|||||
|
Регистрация: Dec 2007
Сообщений: 21
|
Идею понля, спасибо , но проверив, ошибка вылезает 1114: The public attribute can only be used inside a package.
|
|
|||||
|
Это потому, что ты в кадре код пишешь, а не в отдельном файле, как положено. Просто слово public убери тогда.
__________________
if (love is true) break my.heart; |
|
|||||
|
Регистрация: Dec 2007
Сообщений: 21
|
Пока что-то пусто(((
var myXML:XML = new XML(); var XML_URL:String = "PATH"; var myXMLURL:URLRequest = new URLRequest(XML_URL); var myLoader:URLLoader = new URLLoader(myXMLURL); var videoArray:Array; myLoader.addEventListener("complete", xmlLoaded); function xmlLoaded(event:Event):void { myXML = XML(myLoader.data); var videoArr:Array = new Array(); for(var i:int=0;i<myXML.children().length();i++) { videoArr[i] = [myXML.item[i].idVideo, myXML.item[i].nameVideo, myXML.item[i].urlVideo]; } videoArray = videoArr; } trace(videoArray); //Выводит null ![]() |
|
|||||
|
Подписав слушателя методом addEventListener мы не вызываем метод xmlLoaded моментально - вызов произойдет через некоторое время после загрузки xml. А вот trace выполнится сразу.
var myXML:XML = new XML(); var XML_URL:String = "PATH"; var myXMLURL:URLRequest = new URLRequest(XML_URL); var myLoader:URLLoader = new URLLoader(myXMLURL); var videoArray:Array; myLoader.addEventListener("complete", xmlLoaded); function xmlLoaded(event:Event):void { myXML = XML(myLoader.data); var videoArr:Array = new Array(); for(var i:int=0;i<myXML.children().length();i++) { videoArr[i] = [myXML.item[i].idVideo, myXML.item[i].nameVideo, myXML.item[i].urlVideo]; } videoArray = videoArr; doActionAfterLoading(); } function doActionAfterLoading():void { trace(videoArray); }
__________________
if (love is true) break my.heart; |
|
|||||
|
Регистрация: Dec 2007
Сообщений: 21
|
Огромное спасибо! Теперь понял как работает addEventListener.
|
|
|||||
|
Можно сразу внутри функции передавать в массив который был определён внешне, зачем левый массив? сборщик муссора его скорее всего уберёт, но какой смысл лишний действий?
|
|
|||||
|
Сборщик мусора его не уберет до тех пор, пока ссылка на него из переменной videoArray не будет убрана - это один массив, присвоение не плодит массивы. Конечно можно сразу писать во внешнюю переменную. Спросили как передать значение - так, мне кажется, нагляднее. А если эта внешняя переменная находится вне класса или же содержится как переменная какого либо подкласса, то еще и полезно.
__________________
if (love is true) break my.heart; Последний раз редактировалось Rzer; 23.04.2009 в 01:40. |
![]() |
![]() |
Часовой пояс GMT +4, время: 12:00. |
|
|
« Предыдущая тема | Следующая тема » |
|
|