Versión del lenguaje: | ActionScript 3.0 |
Versiones de motor de ejecución: | AIR 1.0, Flash Player 9, Flash Lite 4 |
Los destinos de eventos son una parte importante del modelo de eventos de Flash® Player y Adobe AIR. El destino del evento sirve de punto focal para el flujo del evento de la jerarquía de la lista de visualización. Cuando se produce un evento, como hacer clic con el ratón o presionar una tecla, se distribuye un objeto de evento en el flujo del evento desde la raíz de la lista de visualización. El objeto de evento realiza este viaje de ida y vuelta al destino de evento, que se divide conceptualmente en tres fases: la fase de captura abarca el viaje desde la raíz hasta el último nodo antes del nodo del destino de evento; la fase de destino abarca sólo el nodo de destino de evento y la fase de propagación abarca el resto de los nodos encontrados en el viaje de vuelta hacia la raíz de la lista de visualización.
En general, el modo más sencillo para que una clase definida por el usuario adquiera la capacidad de distribución de eventos es ampliar EventDispatcher. Si no fuera posible (por ejemplo, si la clase ya amplía otra clase), puede implementar la interfaz IEventDispatcher, crear un miembro EventDispatcher y escribir código sencillo para dirigir las llamadas al miembro EventDispatcher añadido.
Método | Definido por | ||
---|---|---|---|
addEventListener(type:String, listener:Function, useCapture:Boolean = false, priority:int = 0, useWeakReference:Boolean = false):void
Registra un objeto de detector de eventos con un objeto EventDispatcher, de modo que el detector reciba la notificación de un evento. | IEventDispatcher | ||
Distribuye un evento en el flujo del evento. | IEventDispatcher | ||
Comprueba si el objeto EventDispatcher tiene detectores registrados para un tipo concreto de evento. | IEventDispatcher | ||
Elimina un detector del objeto EventDispatcher. | IEventDispatcher | ||
Comprueba si hay registrado un detector de eventos con este objeto EventDispatcher o con cualquiera de sus ascendientes para el tipo de evento concreto. | IEventDispatcher |
addEventListener | () | método |
public function addEventListener(type:String, listener:Function, useCapture:Boolean = false, priority:int = 0, useWeakReference:Boolean = false):void
Versión del lenguaje: | ActionScript 3.0 |
Versiones de motor de ejecución: | AIR 1.0, Flash Player 9, Flash Lite 4 |
Registra un objeto de detector de eventos con un objeto EventDispatcher, de modo que el detector reciba la notificación de un evento. Puede registrar detectores de eventos en todos los nodos de la lista de visualización para un tipo concreto de evento, fase y prioridad.
Una vez registrado correctamente un detector de eventos, no puede cambiar su prioridad mediante llamadas adicionales a addEventListener()
. Para cambiar la prioridad de un detector, en primer lugar debe llamar a removeEventListener()
. Seguidamente, puede volver a registrar el nuevo nivel de prioridad.
Una vez registrado el detector, las siguientes llamadas a addEventListener()
con un valor type
o useCapture
distinto tendrán como resultado la creación de un registro independiente del detector. Por ejemplo, si registra primero un detector con useCapture
definido como true
, detectará únicamente durante la fase de captura. Si vuelve a llamar a addEventListener()
con el mismo objeto detector, pero con useCapture
definido como false
, tendrá dos detectores independientes: uno que detecta durante la fase de captura y otro que lo hace durante las fases de destino y de propagación.
No es posible registrar un detector de eventos únicamente para la fase de destino o la fase de propagación. Dichas fases se acoplan durante el registro, ya que la propagación sólo se aplica a los ascendientes del nodo de destino.
Si ya no necesita ningún detector de eventos, elimínelo llamando a EventDispatcher.removeEventListener()
; en caso contrario, podrían surgir problemas de memoria. Los objetos con detectores de eventos registrados no se eliminan automáticamente de la memoria, ya que el recolector de datos innecesarios no elimina objetos que aún tienen referencias.
Al copiar una instancia EventDispatcher no se copian los detectores de eventos asociados. (Si el nodo recién creado necesita un detector de eventos, debe asociarlo después de crear el nodo.) Sin embargo, si mueve una instancia EventDispatcher, los detectores de eventos asociados se moverán también.
Si el detector de eventos se registra en un nodo mientras se procesa un evento en dicho nodo, el detector de eventos no se desencadenará durante la fase actual, aunque sí se desencadenará en una fase posterior del flujo del evento, por ejemplo, en la fase de propagación.
Si un detector de eventos se elimina de un nodo mientras se procesa un evento en dicho nodo, las acciones actual seguirán desencadenándolo. Una vez eliminado, el detector de eventos ya no se vuelve a invocar nunca más (a no ser que se registre de nuevo para otro proceso).
Parámetros
type:String — El tipo de evento.
| |
listener:Function — La función del detector que procesa el evento. Esta función debe aceptar un objeto de evento como parámetro único y no debe devolver ningún valor, tal como indica el siguiente ejemplo:
| |
useCapture:Boolean (default = false ) — Determina si el detector funciona en la fase de captura o en las fases de destino y de propagación. Si useCapture se define como true , el detector procesa el evento sólo durante la fase de captura y no en las fases de destino o propagación. Si useCapture es false , el detector procesa el evento sólo durante la fase de destino o de propagación. Para detectar el evento en las tres fases, llame dos veces a addEventListener() , una con useCapture definido como true y, a continuación, otra con useCapture establecido en false .
| |
priority:int (default = 0 ) — El nivel de prioridad del detector de eventos. Las prioridades se designan mediante un entero de 32 bits. Cuanto mayor sea el número, mayor será la prioridad. Todos los detectores con prioridad n se procesan antes que los detectores con prioridad n-1. Si dos o más detectores comparten la misma prioridad, se procesarán en el orden en el que se añadieron. La prioridad predeterminada es 0.
| |
useWeakReference:Boolean (default = false ) — Determina si la referencia al detector es fuerte o débil. Una referencia fuerte (valor predeterminado) impide que el detector sea eliminado por el recolector de datos innecesarios. Una referencia débil no lo hace. Las funciones de miembros de clase no están sujetas a la recolección de elementos no utilizados, por lo que |
dispatchEvent | () | método |
public function dispatchEvent(event:Event):Boolean
Versión del lenguaje: | ActionScript 3.0 |
Versiones de motor de ejecución: | AIR 1.0, Flash Player 9, Flash Lite 4 |
Distribuye un evento en el flujo del evento. El destino del evento es el objeto EventDispatcher en el que se llama dispatchEvent()
.
Parámetros
event:Event — El objeto de evento distribuido en el flujo del evento.
|
Boolean — Un valor true a menos que se llame a preventDefault() en el evento, en cuyo caso devolverá false .
|
hasEventListener | () | método |
public function hasEventListener(type:String):Boolean
Versión del lenguaje: | ActionScript 3.0 |
Versiones de motor de ejecución: | AIR 1.0, Flash Player 9, Flash Lite 4 |
Comprueba si el objeto EventDispatcher tiene detectores registrados para un tipo concreto de evento. De este modo, es posible determinar en qué lugar de la jerarquía del flujo del evento un objeto EventDispatcher ha alterado el control de un tipo de evento. Para determinar si un tipo de evento concreto realmente desencadenará un detector de eventos, utilice IEventDispatcher.willTrigger()
.
La diferencia entre hasEventListener()
y willTrigger()
reside en que hasEventListener()
examina sólo el objeto al que pertenece, mientras que willTrigger()
examina todo el flujo del evento especificado por el parámetro type
.
Parámetros
type:String — El tipo de evento.
|
Boolean — Un valor true si está registrado un detector del tipo especificado; false en caso contrario.
|
Elementos de API relacionados
removeEventListener | () | método |
public function removeEventListener(type:String, listener:Function, useCapture:Boolean = false):void
Versión del lenguaje: | ActionScript 3.0 |
Versiones de motor de ejecución: | AIR 1.0, Flash Player 9, Flash Lite 4 |
Elimina un detector del objeto EventDispatcher. Si no hay ningún detector coincidente registrado con el objeto EventDispatcher, la llamada a este método no surtirá ningún efecto.
Parámetros
type:String — El tipo de evento.
| |
listener:Function — El objeto detector que se va a eliminar.
| |
useCapture:Boolean (default = false ) — Especifica si el detector se registró para la fase de captura o para las fases de destino y de propagación. Si el detector se registró para la fase de captura y para las fases de destino y propagación, serán necesarias dos llamadas a removeEventListener() para eliminar ambos: una llamada con useCapture definido como true y otra llamada con useCapture definido como false .
|
willTrigger | () | método |
public function willTrigger(type:String):Boolean
Versión del lenguaje: | ActionScript 3.0 |
Versiones de motor de ejecución: | AIR 1.0, Flash Player 9, Flash Lite 4 |
Comprueba si hay registrado un detector de eventos con este objeto EventDispatcher o con cualquiera de sus ascendientes para el tipo de evento concreto. Este método devuelve true
si se desencadena un detector de eventos durante cualquier fase del flujo del evento cuando se distribuye un evento del tipo especificado a este objeto EventDispatcher o a cualquiera de sus descendientes.
La diferencia entre hasEventListener()
y willTrigger()
reside en que hasEventListener()
examina sólo el objeto al que pertenece, mientras que willTrigger()
examina todo el flujo del evento especificado por el parámetro type
.
Parámetros
type:String — El tipo de evento.
|
Boolean — Un valor true si se desencadena un detector del tipo especificado; de lo contrario, false .
|
decorDispatcher
) de la clase DecoratedDispatcher y se utiliza la variable decorDispatcher
para llamar a addEventListener()
con el evento personalizado doSomething
. Este evento se gestiona con didSomething()
, que imprime una línea de texto utilizando trace()
.
package { import flash.events.Event; import flash.display.Sprite; public class IEventDispatcherExample extends Sprite { public function IEventDispatcherExample() { var decorDispatcher:DecoratedDispatcher = new DecoratedDispatcher(); decorDispatcher.addEventListener("doSomething", didSomething); decorDispatcher.dispatchEvent(new Event("doSomething")); } public function didSomething(evt:Event):void { trace(">> didSomething"); } } } import flash.events.IEventDispatcher; import flash.events.EventDispatcher; import flash.events.Event; class DecoratedDispatcher implements IEventDispatcher { private var dispatcher:EventDispatcher; public function DecoratedDispatcher() { dispatcher = new EventDispatcher(this); } public function addEventListener(type:String, listener:Function, useCapture:Boolean = false, priority:int = 0, useWeakReference:Boolean = false):void{ dispatcher.addEventListener(type, listener, useCapture, priority); } public function dispatchEvent(evt:Event):Boolean{ return dispatcher.dispatchEvent(evt); } public function hasEventListener(type:String):Boolean{ return dispatcher.hasEventListener(type); } public function removeEventListener(type:String, listener:Function, useCapture:Boolean = false):void{ dispatcher.removeEventListener(type, listener, useCapture); } public function willTrigger(type:String):Boolean { return dispatcher.willTrigger(type); } }
Tue Jun 12 2018, 02:12 PM Z