我的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
我不知道如何解决这个问题,任何人都有任何想法?
答案 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)
监听器是异步的。在您的情况下,这意味着全局变量的跟踪不会等待负载完成。
相反,你应该做的是让你的监听器设置你的全局变量,并在加载完成后调用你想要执行的任何方法。