在类中使用EventListening的问题

时间:2011-11-14 16:48:53

标签: actionscript-3 oop class event-listener

我的main.as文件(目前)只包含对类函数的调用initDB()

我的另一个类的initDB()函数按预期触发。 initDB旨在加载XML文件,并且监听器监视文件活动,该监听器在完成时设置全局变量。

我在initDB()中调用main.as后跟踪全局变量并显示null,但我认为这是因为调用者未包含在{ {1}}

而不是:

initDB()

我得到了:

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

我不知道如何解决这个问题,任何人都有任何想法?

2 个答案:

答案 0 :(得分:1)

在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 ) );
  }

这只是动作流程的基本示例,事件可能不必由类本身调度。可以通过各种方式实现相同的流程。

答案 1 :(得分:0)

监听器是异步的。在您的情况下,这意味着全局变量的跟踪不会等待负载完成。

相反,你应该做的是让你的监听器设置你的全局变量,并在加载完成后调用你想要执行的任何方法。