Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/user-interface/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Actionscript 3 课堂上的听力问题_Actionscript 3_Oop_Class_Event Listener - Fatal编程技术网

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()

我的另一个类上的My
initDB()
函数按预期激发
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的一个步骤