Il flusso di eventi

Ogni volta che si verifica un evento, Flash Player invia un oggetto evento. Se il destinatario dell'evento non fa parte dell'elenco di visualizzazione, Flash Player trasmette l'oggetto evento direttamente al destinatario dell'evento. Ad esempio, Flash Player invia 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 invia un oggetto evento, l'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. Ad esempio, se un utente fa clic sull'oggetto child1 dell'elenco di visualizzazione, Flash Player invierà 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 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 concepisce l'elenco di visualizzazione come una struttura gerarchica verticale con lo Stage al vertice, come illustrato nel diagramma seguente:


Diagramma di un ipotetico elenco di visualizzazione con Stage come nodo principale che contiene il nodo Parent Node, che a sua volta contiene i nodi Child1 Node e Child2 Node.

Se un utente fa clic su Child1 Node, Flash Player invia un oggetto evento nel flusso di eventi. Come dimostra l'immagine seguente, il tragitto dell'oggetto parte da Stage, attraversa Parent Node e arriva a Child1 Node, per poi ripartire verso Stage attraversando di nuovo Parent Node e arrestarsi a Stage.


Diagramma della fase di bubbling dell'evento. La fase di cattura parte da Stage e attraversa Parent Node. La fase target si verifica in corrispondenza di Child1 Node. La fase di bubbling attraversa Parent Node e arriva a Stage.

In questo esempio, la fase di cattura comprende Stage e Parent Node durante il tragitto verso il basso iniziale. La fase target comprende il tempo trascorso in corrispondenza di Child1 Node. La fase di bubbling comprende Parent Node 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. Ad esempio, un oggetto button 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 bisognerebbe 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, consultare la documentazione API o analizzare le proprietà dell'oggetto evento. L'analisi delle proprietà dell'oggetto evento viene descritta nella sezione seguente.


Flash CS3

 

Inviami un messaggio e-mail quando vengono aggiunti dei commenti a questa | Rapporto sui commenti

Pagina corrente: http://livedocs.adobe.com/flash/9.0_it/main/00000137.html