Adobe Flex/Actionscript事件处理顺序

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

Ama*_*osh 5

如果代码中显示了一个接一个地调度了两个事件,则只有在执行第一个事件的所有处理程序并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)