2010-10-18 15 views
5

De la manera más simple posible, estoy tratando de averiguar si se garantiza que los eventos se manejarán en el orden en que se envían. Digamos que tengo el siguiente, código simple:Orden de manejo de eventos de Adobe Flex/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)" ... /> 

Si en alguna parte de mi solicitud (ya sea desde dentro del propio componente o en otro lugar con el componente de instancia), si yo enviaré esos eventos en el orden de 1, 2 , 3, como:

dispatchEvent(new Event('myEvent1')); 
dispatchEvent(new Event('myEvent2')); 
dispatchEvent(new Event('myEvent3')); 

son aquellos manipuladores garantizado para disparar en el mismo orden (es decir, handler1, handler2, handler3) ...? Todo lo que busco en Internet (léase: Google) en relación con el "orden de procesamiento de eventos de adobe" o cualquier cosa similar solo se refiere al ciclo de vida del evento. Sin embargo, no puedo encontrar nada sobre esta característica específica. Cualquier ayuda es muy apreciada.

--Ian

Respuesta

5

Si se envían dos eventos uno tras otro como se muestra en el código, el segundo evento se enviará solo después de que se ejecuten todos los controladores del primer evento y se devuelva el método 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)); 

Pero si usted ha registrado dos detectores registrados con la misma prioridad para un evento, que se procesan en el orden en que se añadieron.

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

Usted puede utilizar el parámetro del método priorityaddEventListener para hacer cumplir la orden:

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)); 
0

Por lo general, lo hacen, pero no hay garantía, por lo que no se debe asumir que lo harán.

+0

Recibo esta respuesta conflictiva en el foro de Adobe: http://forums.adobe.com/thread/739912?tstart=0 – istrasci

0

Si Dios nos había querido saber el orden en que se producirán acontecimientos, él no habría dado nos callLater()

;) respuesta

1

Ditto Robert de Bak. Sin embargo, si necesita -necesitadamente- para hacer que esto funcione por cualquier razón, puede etiquetar los eventos con un número que se incrementa en uno cada vez, haga que sus oyentes simplemente los almacenen en una cola central de algún tipo, luego ordénelos de acuerdo con el índice que has asignado Probablemente más trabajo de lo que vale.

0

En general, el ciclo de eventos se inicia cuando se produce un envío de eventos, va a su principal y sube la jerarquía de la UI a través de otros padres desde donde vuelve a pasar por sus hijos. A continuación se muestra un diagrama que ilustra el ciclo de vida del evento en Flex:

Flex event lifecycle

Eventos pasan por diferentes fases, pero algunos eventos pueden ser restringidos de ciertas fases. Al crear un evento nuevo, puede evitar que el evento burbujee durante la fase de burbujeo. Para más detalles, lee Essential ActionScript 3.0 por Colin Moock.

Los eventos no se desencadenan ni procesan en ninguna secuencia. Dependen de cuándo se dispara el evento. En Flex, los eventos son asincrónicos.

Cuestiones relacionadas