Flusso di eventi

Flash Player 9 e versioni successive, Adobe AIR 1.0 e versioni successive

Ogni volta che si verifica un evento, Flash Player o AIR inviano un oggetto evento. Se il destinatario dell'evento non fa parte dell'elenco di visualizzazione, Flash Player o AIR trasmettono l'oggetto evento direttamente al destinatario dell'evento. Flash Player invia, ad esempio, l'oggetto progress direttamente a un oggetto URLStream. Se invece il destinatario dell'evento fa parte dell'elenco di visualizzazione, Flash Player invia l'oggetto evento all'elenco di visualizzazione e l'oggetto percorre l'elenco di visualizzazione fino ad arrivare al destinatario dell'evento.

Il flusso di eventi descrive il modo in cui l'oggetto evento percorre l'elenco di visualizzazione. L'elenco di visualizzazione è organizzato come una struttura gerarchica. In cima all'elenco si trova lo stage, uno speciale contenitore di oggetti di visualizzazione che funge da radice dell'elenco di visualizzazione. Lo stage è rappresentato dalla classe flash.display.Stage ed è accessibile solo attraverso un oggetto di visualizzazione. Ogni oggetto di visualizzazione è dotato di una proprietà denominata stage che fa riferimento allo stage per quella particolare applicazione.

Quando Flash Player o AIR inviano un oggetto evento per un evento relativo all'elenco di visualizzazione, tale oggetto esegue un tragitto circolare dallo stage al nodo target. La specifica degli eventi DOM definisce nodo target il nodo che rappresenta il destinatario dell'evento. In altre parole, il nodo target è l'oggetto dell'elenco di visualizzazione in cui si è verificato l'evento. Se, ad esempio, un utente fa clic sull'oggetto child1 dell'elenco di visualizzazione, Flash Player o AIR inviano un oggetto evento usando child1 come nodo target.

Il flusso di eventi può essere suddiviso in tre parti. La prima parte si chiama fase di cattura e comprende tutti i nodi dallo stage al livello superiore del nodo target. La seconda parte si chiama fase target e comprende solo il nodo target. La terza parte si chiama fase di bubbling (propagazione) e comprende i nodi incontrati nel tragitto inverso, cioè dal livello superiore del nodo target allo stage.

I nomi delle fasi acquistano più senso se si considera l'elenco di visualizzazione come una struttura gerarchica verticale con lo stage al vertice, come illustrato nel diagramma seguente:

Se un utente fa clic su Nodo secondario1, Flash Player o AIR inviano un oggetto evento nel flusso di eventi. Come dimostra l'immagine seguente, il tragitto dell'oggetto parte da Stage, attraversa Nodo principale e arriva a Nodo secondario1, per poi ripartire verso Stage attraversando di nuovo Nodo principale e arrestandosi a Stage.

In questo esempio, la fase di cattura comprende Stage e Nodo principale durante il tragitto iniziale verso il basso. La fase target comprende il tempo trascorso in corrispondenza di Nodo secondario1. La fase di bubbling comprende Nodo principale e Stage che vengono incontrati durante il tragitto contrario intrapreso per tornare al nodo principale.

Il flusso di eventi contribuisce a rendere il sistema di gestione degli eventi più efficace per i programmatori ActionScript. Dal momento che nelle versioni precedenti di ActionScript il flusso di eventi non esiste, i listener di eventi possono essere aggiunti solo all'oggetto che genera l'evento. In ActionScript 3.0, è possibile aggiungere listener di eventi al nodo target ma anche a tutti i nodi del flusso di eventi.

La facoltà di aggiungere listener di eventi in vari punti del flusso di lavoro si rivela utile per i componenti dell'interfaccia utente che comprendono più oggetti. Un oggetto button, ad esempio, spesso contiene un oggetto text che funge da etichetta del pulsante. In mancanza della possibilità di aggiungere un listener al flusso di eventi, per ricevere la notifica degli eventi click sul pulsante sarebbe necessario aggiungere un listener all'oggetto button e uno all'oggetto text. La presenza del flusso di eventi permette invece di inserire un unico listener di eventi sull'oggetto button che gestisce gli eventi click che si verificano sia sull'oggetto text sia nelle aree di validità dell'oggetto button che non sono oscurate dall'oggetto text.

Non tutti gli oggetti evento attraversano le tre fasi del flusso di eventi. Alcuni tipi di evento, come enterFrame e init vengono inviati direttamente al nodo target e non partecipano alla fase di cattura né alla fase di bubbling. Altri eventi possono avere come destinatari oggetti che non rientrano nell'elenco di visualizzazione, come gli eventi inviati a un'istanza della classe Socket. Anche questi tipi di evento vengono trasmessi direttamente all'oggetto target senza partecipare alle fasi di cattura e di bubbling.

Per conoscere il comportamento di un tipo di evento specifico, vedete la documentazione API o analizzare le proprietà dell'oggetto evento. L'analisi delle proprietà dell'oggetto evento viene descritta nella sezione seguente.