Actionscript 3 课堂上的听力问题
我得到了我的Actionscript 3 课堂上的听力问题,actionscript-3,oop,class,event-listener,Actionscript 3,Oop,Class,Event Listener,我得到了我的main.as文件,该文件(目前)只包含对类函数的调用initDB() 我的另一个类上的MyinitDB()函数按预期激发initDB用于加载XML文件,文件活动由侦听器监控,侦听器在完成时设置一个全局变量 我在我的main.as中跟踪调用initDB()后的全局变量,它显示null,但我认为这是因为调用initDB() 而不是: - initDB(); - associated event listener which activates upon completion of XM
main.as
文件,该文件(目前)只包含对类函数的调用initDB()
我的另一个类上的MyinitDB()
函数按预期激发initDB
用于加载XML文件,文件活动由侦听器监控,侦听器在完成时设置一个全局变量
我在我的main.as中跟踪调用initDB()
后的全局变量,它显示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
我不知道如何解决这个问题,有人有什么想法吗?侦听器是异步的。在您的情况下,这意味着全局变量的跟踪不会等待加载完成
相反,您应该让侦听器设置全局变量,并在加载完成后调用任何要执行的方法。侦听器是异步的。在您的情况下,这意味着全局变量的跟踪不会等待加载完成
相反,您应该让侦听器设置全局变量,并在加载完成后调用任何要执行的方法。在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 ) );
}
这只是操作流的一个基本示例,事件可能不必由类本身调度。相同的流程可以通过多种方式实现。在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 ) );
}
这只是操作流的一个基本示例,事件可能不必由类本身调度。同样的流程可以通过多种方式实现。我注意到您将问题标记为oop。您的设计不是真正的OOP,而是过程化的。您根本不应该有全局变量。相反,主控制器应该通知子组件他们关心的事情,通常是通过调用方法或设置它们的属性。OOP方面来自这样一个事实,即它是类通信,而不是函数通信。产品通常只涉及功能对功能。类是进入oop的一步我注意到您将问题标记为oop。您的设计不是真正的OOP,而是过程化的。您根本不应该有全局变量。相反,主控制器应该通知子组件他们关心的事情,通常是通过调用方法或设置它们的属性。OOP方面来自这样一个事实,即它是类通信,而不是函数通信。产品通常只涉及功能对功能。类是OOP的一个步骤