Flash Player och AIR skickar händelseobjekt varje gång en händelse inträffar. Om händelsemålet inte finns med i visningslistan, skickar Flash Player eller AIR händelseobjektet direkt till händelsemålet. Flash Player skickar till exempel progress-händelseobjektet direkt till ett URLStream-objekt. Om händelsemålet däremot finns med i visningslistan, skickar Flash Player händelseobjektet till visningslistan och sedan förflyttar sig händelseobjektet igenom visningslistan till händelsemålet.
Händelseflödet
beskriver hur ett händelseobjekt förflyttar sig i visningslistan. Visningslistan är ordnad i en hierarki ungefär som ett träd. Överst i visningslistans hierarki finns scenen, som är en särskild behållare för visningsobjekt och fungerar som visningslistans rot. Scenen representeras av klassen flash.display.Stage och går bara att komma åt via ett visningsobjekt. Varje visningsobjekt har en egenskap med namnet
stage
som refererar till scenen för det programmet.
När Flash Player eller AIR skickar ett händelseobjekt för en händelse som rör visningslistan gör händelseobjektet en rundresa från scenen till
målnoden
. DOM-händelsespecifikationen definierar målnoden som den nod som representerar händelsemålet. Målnoden är med andra ord visningslisteobjektet där händelsen inträffade. Om en användare till exempel klickar på ett visningslisteobjekt med namnet
child1
, skickar Flash Player eller AIR ett händelseobjekt och använder
child1
som målnod.
Händelseflödet är begreppsmässigt indelat i tre delar. Den första delen kallas för hämtningsfasen och består av alla noder från scenen till målnodens överordnade nod. Den andra delen kallas för målfasen och består enbart av målnoden. Den tredje delen kallas för bubblingsfasen. Bubblingsfasen består av noderna som påträffades på tillbakavägen från målnodens överordnade nod till scenen.
Namnen på faserna blir mer logiska om du tänker på visningslistan som en lodrät hierarki med scenen högst upp som i följande diagram:
Om en användare klickar på
Child1 Node
skickar Flash Player eller AIR ett händelseobjekt till händelseflödet. Som nedanstående bild visar börjar objektets resa vid
Stage
, rör sig nedåt till
Parent Node
, vidare till
Child1 Node
och ”bubblar” sedan tillbaka till
Stage
genom att passera genom
Parent Node
igen på vägen tillbaka till
Stage
.
I det här exemplet utgörs hämtningsfasen av
Stage
och
Parent Node
under den inledande resan nedåt. Målfasen utgörs av tiden vid
Child1 Node
. Bubblingsfasen utgörs av
Parent Node
och
Stage
när de påträffas under resan tillbaka uppåt till rotnoden.
Händelseflödet ger ett mer effektivt händelsehanteringssystem än det som tidigare fanns tillgängligt för ActionScript-programmerare. I tidigare versioner av ActionScript finns inte händelseflödet, vilket gör att händelseavlyssnare bara kan läggas in i objektet som genererar händelsen. I ActionScript 3.0 kan du lägga till händelseavlyssnare till valfri nod i händelseflödet och inte bara till målnoden.
Möjligheten att kunna lägga till händelseavlyssnare längs händelseflödet är användbart när en komponent i användargränssnittet består av flera objekt. Ett knappobjekt består till exempel ofta av ett textobjekt som fungerar som knappens etikett. Utan möjligheten att kunna lägga till en avlyssnare till händelseflödet skulle du behöva lägga till en avlyssnare till både knappobjektet och textobjektet för att se till att du meddelas om klickningshändelser som inträffar på knappen. Händelseflödet gör dock att du kan placera en enda händelseavlyssnare i knappobjektet som hanterar klickningshändelser som inträffar i textobjektet eller de områden av knappobjektet som inte är dolda av textobjektet.
Det finns vissa händelseobjekt som inte deltar i alla tre faserna av händelseflödet. Vissa typer av händelser, som
enterFrame
och
init
, skickas direkt till målnoden och deltar inte i varken hämtningsfasen eller bubblingsfasen. Andra händelser kan ha målobjekt som inte finns med i visningslistan, till exempel händelser som skickas till en instans av klassen Socket. Sådana händelseobjekt går även direkt till målobjektet utan att delta i hämtnings- och bubblingsfaserna.
För att ta reda på hur en viss typ av händelse fungerar kan du antingen läsa i API-dokumentationen eller undersöka händelseobjektets egenskaper. Hur du undersöker händelseobjektets egenskaper beskrivs i nästa avsnitt.