ist*_*sci 5 apache-flex events adobe actionscript
尽可能简单,我试图找出是否保证按照调度顺序处理事件.假设我有以下简单代码:
private function handler1(e:Event):void { .. processing ..}
private function handler2(e:Event):void { .. processing ..}
private function handler3(e:Event):void { .. processing ..}
<SomeComponent myEvent1="handler1(event)" myEvent2="handler2(event)" myEvent3="handler3(event)" ... />
Run Code Online (Sandbox Code Playgroud)
如果在我的应用程序中的某个地方(来自组件本身或实例化组件的其他地方),如果我按照1,2,3的顺序发送这些事件,如:
dispatchEvent(new Event('myEvent1'));
dispatchEvent(new Event('myEvent2'));
dispatchEvent(new Event('myEvent3'));
Run Code Online (Sandbox Code Playgroud)
这些处理程序是否保证以相同的顺序触发(即handler1,handler2,handler3)......?我搜索互联网(阅读:谷歌)的任何关于"adobe事件处理订单"或任何类似的东西只是指事件生命周期.我找不到这个特定的细微差别.任何帮助是极大的赞赏.
--Ian
如果代码中显示了一个接一个地调度了两个事件,则只有在执行第一个事件的所有处理程序并dispatchEvent返回方法后才会调度第二个事件.
private function handler_1(e:Event):void {}
private function handler_2(e:Event):void {}
a.addEventListener(Event.TYPE_1, handler_1);
a.addEventListener(Event.TYPE_2, handler_2);
//Different events:
//handler_1 will be called before handler_2
a.dispatchEvent(new Event(Event.TYPE_1));
a.dispatchEvent(new Event(Event.TYPE_2));
Run Code Online (Sandbox Code Playgroud)
但是,如果您已注册两个注册具有相同优先级的侦听器,则会按照添加顺序对其进行处理.
private function handler_1(e:Event):void {}
private function handler_2(e:Event):void {}
a.addEventListener(Event.TYPE_1, handler_1);
a.addEventListener(Event.TYPE_1, handler_2);
/*
Same event, same priority:
Called based on the order in which they were added;
Hence handler_1 is called first.
*/
a.dispatchEvent(new Event(Event.TYPE_1));
Run Code Online (Sandbox Code Playgroud)
您可以使用方法的priority参数addEventListener来强制执行订单:
a.addEventListener(Event.TYPE_1, handler_1, false, 0);
a.addEventListener(Event.TYPE_1, handler_2, false, 1);//higher priority
/*
handler_2 will be invoked before handler_1
*/
a.dispatchEvent(new Event(Event.TYPE_1));
Run Code Online (Sandbox Code Playgroud)