Проблема с EventListening в классах - PullRequest
1 голос
/ 14 ноября 2011

У меня есть мой main.as файл, который (на данный момент) содержит только вызов функции класса initDB()

Моя initDB() функция на других моих классах срабатывает, как и ожидалось.initDB предназначен для загрузки файла XML, а активность файла контролируется слушателем, который по завершении устанавливает глобальную переменную.

Я отслеживаю глобальную переменную после вызова initDB() в моем main.as и отображает null, но я думаю, это потому, что слушатель не включен в вызов initDB()

Вместо:

- initDB();
- associated event listener which activates upon completion of XML parse
- trace to variable

Я получаю:

- initDB();
- trace to variable
- associated event listener which activates upon completion of XML parse

Понятия не имею, как обойти это, у кого-нибудь есть идеи?

Ответы [ 2 ]

1 голос
/ 14 ноября 2011

В main.as

  private var other:OtherClass;
  private var global:Object;

  private function init():void
  {
        //instantiate your other class
        other = new OtherClass();
        other.addEventListener( Event.COMPLETE , completeHandler );
        other.initDb();
  }

  private function completeHandler( event:Event ):void
  {
       other.removeEventListener( Event.COMPLETE , completeHandler );

       //global could be a property of the event, 
       //rather than the class itself...

       trace("Event Complete" );
       global = other.global;          
  }

В другом вашем классе

  public function initDb():void
  {
       //add listener for load complete
       trace("Called initDb");
  }


  private function loadComplete():void
  {
       //remove listener for load complete
       // set your global variable here...
       //then dispatch event!

       trace("XML load complete");
       dispatchEvent( new Event( Event.COMPLETE ) );
  }

Это только базовый пример для последовательности действий, событие может не отправлятьсясам класс.Один и тот же поток может быть достигнут различными способами.

0 голосов
/ 14 ноября 2011

Слушатели асинхронные. В вашем случае это означает, что трассировка глобальной переменной не ожидает завершения загрузки.

Вместо этого вам нужно, чтобы слушатель установил глобальную переменную и вызвал все методы, которые вы хотите выполнить после завершения загрузки.

...