AS3 Как вы объявляете глобальную переменную? - PullRequest
0 голосов
/ 28 февраля 2012

Я пытаюсь получить значение из функции, которая является событием URLLoader COMPLETE, но даже с объявлением переменных вне функции я не смогу получить значение.Я застрял.

Кажется, что асинхронная природа Flash делает невозможным получение значения: например, это работает:

// Initialise a URLLoader to get XML data from XML file
var myFPBLoader:URLLoader = new URLLoader();
myFPBLoader.load(new URLRequest("flightPlannerBoard.xml"));


// Check XML data fully loaded
myFPBLoader.addEventListener(Event.COMPLETE, processFPBxml);

var myXML:XML = new XML();// Declared **outside** function

function processFPBxml(e:Event):void {
this.myXML = XML(e.target.data);
trace("yep" + myXML); // This works
myTraceXML();
 }

function myTraceXML(){
 trace("more tests:" + myXML); // **This trace works**
}

trace("more tests:" + myXML); // This **doesn't** work

Как получить значение, которое вы можете использоватькогда и где вы хотите?

Ответы [ 2 ]

2 голосов
/ 28 февраля 2012

Вот что происходит в вашем коде:

  1. объявлены функции processFPBxml(), myTraceXML() и переменные myFBPLoader и myXML.
  2. XML начинает загружаться myFPBLoader.load. Код не останавливается на этом этапе. Загрузка выполняется асинхронным вызовом, а остальная часть кода выполняется немедленно .
  3. отслеживается пустой XML trace("more tests:" + myXML); // This **doesn't** work
  4. XML загружен и Event.COMPLETE отправлен.
  5. EventHandler, назначенный вышеупомянутому событию, вызывает ответ: processFPBxml(). В этот момент myXML присваивается загруженным данным.
  6. myTraceXML() называется.

Теперь, если вы хотите продолжить выполнение кода после загрузки XML, вам нужно разделить код на отдельные функции, которые выполняют конкретные задачи, и вызывать эти функции после получения данных из XML. В этом случае вы можете переименовать myTraceXML() в init() или что-либо, что имеет для вас смысл, и написать остальную часть программы (не обязательно в этой конкретной функции. Используйте ее в качестве отправной точки).

0 голосов
/ 28 февраля 2012

Как вы упомянули, запрашиваемые данные через URLLoader получены асинхронно.

Это означает, что данные после не могут быть доступны , пока Flash не получит их. То, что вы пытаетесь сделать, нелогично и не может быть сделано.

Если бы это было возможно, зачем веб-приложениям загружать символы и т.п. при поиске информации для отображения?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...