Versione linguaggio: | ActionScript 3.0 |
Versioni runtime: | AIR 1.0, Flash Player 9, Flash Lite 4 |
I target di eventi sono un componente importante del modello di evento Flash® Player e di Adobe AIR. Il target di eventi funge da punto focale per il modo in cui gli eventi scorrono attraverso la gerarchia dell'elenco di visualizzazione. Quando si verifica un evento come un clic del mouse o la pressione di un tasto, un oggetto Event viene inviato nel flusso di eventi dalla radice dell'elenco di visualizzazione. L'oggetto Event compie un percorso di andata e ritorno verso il target dell'evento, suddiviso concettualmente in tre fasi: la fase di cattura comprende il percorso dalla radice all'ultimo nodo prima di quello del target dell'evento; la fase target comprende solo il nodo del target dell'evento e la fase di bubbling (propagazione) comprende tutti i nodi successivi incontrati nel percorso di ritorno alla radice dell'elenco di visualizzazione.
In generale, il metodo più semplice per consentire a una classe definita dall'utente di acquisire funzioni di invio degli eventi è l'estensione di EventDispatcher. Se questo è impossibile (ovvero se la classe estende già un'altra classe), potete invece implementare l'interfaccia IEventDispatcher, creare un membro di EventDispatcher e scrivere semplici agganci per instradare le chiamate alla classe EventDispatcher aggregata.
Metodo | Definito da | ||
---|---|---|---|
addEventListener(type:String, listener:Function, useCapture:Boolean = false, priority:int = 0, useWeakReference:Boolean = false):void
Registra un oggetto listener di eventi con un oggetto EventDispatcher, in modo che il listener riceva la notifica di un evento. | IEventDispatcher | ||
Invia un evento nel flusso di eventi. | IEventDispatcher | ||
Verifica se per l'oggetto EventDispatcher sono presenti listener registrati per un tipo specifico di evento. | IEventDispatcher | ||
Rimuove un listener dall'oggetto EventDispatcher. | IEventDispatcher | ||
Verifica se un listener di eventi è registrato con questo oggetto EventDispatcher o qualsiasi suo antenato per il tipo di evento specificato. | IEventDispatcher |
addEventListener | () | metodo |
public function addEventListener(type:String, listener:Function, useCapture:Boolean = false, priority:int = 0, useWeakReference:Boolean = false):void
Versione linguaggio: | ActionScript 3.0 |
Versioni runtime: | AIR 1.0, Flash Player 9, Flash Lite 4 |
Registra un oggetto listener di eventi con un oggetto EventDispatcher, in modo che il listener riceva la notifica di un evento. Potete registrare listener di eventi in tutti i nodi dell'elenco di visualizzazione per un tipo di evento, una fase e una priorità specifiche.
Una volta registrato un listener di eventi, non potete modificarne la priorità mediante chiamate aggiuntive a addEventListener()
. Per modificare la priorità di un listener, dovete chiamare innanzitutto removeEventListener()
. In seguito potete registrare nuovamente il listener con il nuovo livello di priorità.
Dopo la registrazione del listener, le successive chiamate a addEventListener()
con un valore diverso per type
o per useCapture
determinano la creazione di un'altra registrazione per il listener. Ad esempio, se un listener viene registrato inizialmente con useCapture
impostato su true
, l'intercettazione avviene solo durante la fase di cattura. Se chiamate di nuovo addEventListener()
utilizzando lo stesso oggetto listener ma impostando useCapture
su false
, ottenete due listener separati: uno rileva gli eventi durante la fase di cattura e l'altro durante la fasi target e di bubbling.
Non potete registrare un listener di eventi solo per la fase target o per la fase di bubbling. Queste fasi vengono accoppiate durante la registrazione perché la propagazione è valida solo per gli antenati del nodo target.
Se il listener di eventi non è più necessario, rimovetelo con una chiamata a EventDispatcher.removeEventListener()
per evitare problemi di memoria. Gli oggetti con listener di eventi registrati non vengono eliminati automaticamente dalla memoria perché il garbage collector non rimuove gli oggetti ancora dotati di riferimenti.
Se copiate un'istanza EventDispatcher, i listener di eventi associati all'istanza non vengono copiati (se un nodo appena creato necessita di un listener di eventi, dovete associarlo dopo avere creato il nodo). Se invece spostate un'istanza EventDispatcher, insieme a questa vengono spostati anche i listener di eventi associati.
Se il listener di eventi viene registrato su un nodo mentre questo sta elaborando un evento, il listener di eventi non viene attivato durante la fase corrente ma può esserlo durante una fase successiva del flusso di eventi, ad esempio la fase di bubbling.
Se un listener di eventi viene rimosso da un nodo mentre questo sta elaborando un evento, il listener continua a essere attivato dalle azioni in corso. Dopo che è stato rimosso, il listener di eventi non viene più richiamato (a meno che non venga registrato nuovamente per elaborazioni future).
Parametri
type:String — Il tipo di evento.
| |
listener:Function — La funzione listener che elabora l'evento. La funzione deve accettare un oggetto Event come unico parametro e non deve restituire nulla, come mostra l'esempio seguente:
| |
useCapture:Boolean (default = false ) — Determina se il listener funziona nella fase di cattura o nelle fasi target e di bubbling. Se useCapture è impostato su true , il listener elabora l'evento solo durante la fase di cattura e non nella fase target o di bubbling. Se useCapture è impostato su false , il listener elabora l'evento solo durante la fase target o di bubbling. Per consentire l'intercettazione dell'evento in tutte e tre le fasi, chiamate due volte addEventListener() , una volta con useCapture impostato su true e un'altra volta con useCapture impostato su false .
| |
priority:int (default = 0 ) — Il livello di priorità del listener di eventi. Le priorità sono indicate da un numero intero a 32 bit. Più alto è il numero, più alta è la priorità. Tutti i listener con priorità n vengono elaborati prima dei listener con priorità n-1. Se due o più listener hanno la stessa priorità, l'elaborazione avviene secondo l'ordine in cui sono stati aggiunti. La priorità predefinita è 0.
| |
useWeakReference:Boolean (default = false ) — Determina se il riferimento al listener è forte o debole. Un riferimento forte (predefinito) evita che il listener venga sottoposto al processo di garbage collection, un riferimento debole no. Le funzioni dei membri a livello di classe non sono soggette a garbage collection, pertanto è possibile impostare |
dispatchEvent | () | metodo |
public function dispatchEvent(event:Event):Boolean
Versione linguaggio: | ActionScript 3.0 |
Versioni runtime: | AIR 1.0, Flash Player 9, Flash Lite 4 |
Invia un evento nel flusso di eventi. Il target dell'evento è l'oggetto EventDispatcher su cui viene chiamato dispatchEvent()
.
Parametri
event:Event — L'oggetto Event inviato al flusso di eventi.
|
Boolean — Un valore true a meno che sull'evento non venga chiamato preventDefault() , nel qual caso viene restituito false .
|
hasEventListener | () | metodo |
public function hasEventListener(type:String):Boolean
Versione linguaggio: | ActionScript 3.0 |
Versioni runtime: | AIR 1.0, Flash Player 9, Flash Lite 4 |
Verifica se per l'oggetto EventDispatcher sono presenti listener registrati per un tipo specifico di evento. Questo consente di determinare in quale punto un oggetto EventDispatcher ha alterato la gestione di un tipo di evento nella gerarchia del flusso di eventi. Per determinare se un tipo di evento specifico attiva effettivamente un listener di eventi, utilizzate IEventDispatcher.willTrigger()
.
La differenza tra hasEventListener()
e willTrigger()
consiste nel fatto che hasEventListener()
esamina solo l'oggetto a cui appartiene, mentre willTrigger()
esamina tutto il flusso di eventi relativo all'evento specificato dal parametro type
.
Parametri
type:String — Il tipo di evento.
|
Boolean — Un valore true se è stato registrato un listener del tipo specificato; false in caso contrario.
|
Elementi API correlati
removeEventListener | () | metodo |
public function removeEventListener(type:String, listener:Function, useCapture:Boolean = false):void
Versione linguaggio: | ActionScript 3.0 |
Versioni runtime: | AIR 1.0, Flash Player 9, Flash Lite 4 |
Rimuove un listener dall'oggetto EventDispatcher. Se non esiste un listener corrispondente registrato nell'oggetto EventDispatcher, la chiamata a questo metodo non ha alcun effetto.
Parametri
type:String — Il tipo di evento.
| |
listener:Function — L'oggetto listener da rimuovere.
| |
useCapture:Boolean (default = false ) — Specifica se il listener è stato registrato per la fase di cattura o per le fasi target e di bubbling. Se il listener è stato registrato sia per la fase di cattura che per quelle target e di bubbling, per eliminare entrambe sono necessarie due chiamate a removeEventListener() : una con useCapture impostato su true e l'altra con useCapture impostato su false .
|
willTrigger | () | metodo |
public function willTrigger(type:String):Boolean
Versione linguaggio: | ActionScript 3.0 |
Versioni runtime: | AIR 1.0, Flash Player 9, Flash Lite 4 |
Verifica se un listener di eventi è registrato con questo oggetto EventDispatcher o qualsiasi suo antenato per il tipo di evento specificato. Questo metodo restituisce true
se durante qualsiasi fase del flusso di eventi viene attivato un listener di eventi quando un evento del tipo specificato viene inviato all'oggetto EventDispatcher o a uno qualsiasi dei suoi discendenti.
La differenza tra hasEventListener()
e willTrigger()
consiste nel fatto che hasEventListener()
esamina solo l'oggetto a cui appartiene, mentre willTrigger()
esamina tutto il flusso di eventi relativo all'evento specificato dal parametro type
.
Parametri
type:String — Il tipo di evento.
|
Boolean — Un valore true se viene attivato un listener del tipo specificato; false in caso contrario.
|
decorDispatcher
) e viene utilizzata la variabile decorDispatcher
per chiamare addEventListener()
con l'evento personalizzato doSomething
, che viene quindi gestito da didSomething()
; viene quindi stampata una riga di testo utilizzando 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:44 PM Z