Basisbeginselen van gebeurtenisafhandeling

Flash Player 9 of hoger, Adobe AIR 1.0 of hoger

U kunt een gebeurtenis zien als elk soort gebeurtenis in een SWF-bestand die voor u als programmeur van belang kan zijn. Zo wordt door de meeste SWF-bestanden een bepaald soort gebruikersinteractie ondersteund. Dit kan iets eenvoudigs zijn, zoals het reageren op een muisklik, of iets complexers, zoals het accepteren en verwerken van gegevens die in een formulier zijn ingevuld. Dergelijke gebruikersinteractie met het SWF-bestand wordt altijd als een gebeurtenis beschouwd. Gebeurtenissen kunnen ook zonder directe gebruikersinteractie plaatsvinden, zoals wanneer het laden van gegevens van een server is voltooid of wanneer een camera die op het systeem is aangesloten, actief is geworden.

In ActionScript 3.0 wordt elke gebeurtenis door een gebeurtenisobject vertegenwoordigd, wat een instantie is van de klasse Event of van een van de subklassen van deze klasse. Een gebeurtenisobject bevat niet alleen informatie over een specifieke gebeurtenis, maar ook methoden die de bewerking van het gebeurtenisobject vergemakkelijken. Als Flash Player of AIR bijvoorbeeld een muisklik detecteert, wordt een gebeurtenisobject gemaakt (een instantie van de klasse MouseEvent), die deze specifieke muisklikgebeurtenis vertegenwoordigt.

Nadat het gebeurtenisobject is gemaakt, wordt dit door Flash Player of AIR verzonden . Dit houdt in dat het gebeurtenisobject wordt doorgegeven aan het object dat het doel is van de gebeurtenis. Een object dat als doel voor een verzonden gebeurtenis fungeert, wordt een gebeurtenisdoel genoemd. Als bijvoorbeeld een camera die op het systeem is aangesloten, actief is geworden, wordt door Flash Player een gebeurtenisobject direct naar het gebeurtenisdoel verzonden, wat in dit geval het object is dat de camera vertegenwoordigt. Als het gebeurtenisdoel zich echter in het weergaveoverzicht bevindt, loopt het gebeurtenisobject van boven naar beneden door de hiërarchie van het weergaveoverzicht, totdat de doelgebeurtenis is bereikt. In sommige gevallen loopt het gebeurtenisobject vervolgens weer via dezelfde route omhoog door de hiërarchie van het weergaveoverzicht. Dit doorlopen van de hiërarchie van het weergaveoverzicht wordt de gebeurtenisstroom genoemd.

U kunt met behulp van gebeurtenislisteners naar gebeurtenisobjecten in de code luisteren. Gebeurtenislisteners zijn de functies of methoden die u schrijft om op specifieke gebeurtenissen te reageren. Als u er zeker van wilt zijn dat het programma op gebeurtenissen reageert, moet u gebeurtenislisteners toevoegen aan het gebeurtenisdoel of aan een willekeurig weergaveoverzichtobject dat onderdeel is van de gebeurtenisstroom van een gebeurtenisobject.

Code voor gebeurtenislisteners volgt altijd de volgende standaardstructuur (elementen die vet zijn weergegeven, moet u voor uw eigen, specifieke geval invullen):

function eventResponse(eventObject:EventType):void 
{ 
    // Actions performed in response to the event go here. 
} 
 
eventTarget.addEventListener(EventType.EVENT_NAME, eventResponse);

In deze code gebeuren twee dingen. Eerst wordt een functie gedefinieerd, waarin de handelingen worden opgegeven die als reactie op de gebeurtenis worden uitgevoerd. Vervolgens wordt de methode addEventListener() van het bronobject aangeroepen, waarmee in wezen de functie wordt ‘geabonneerd’ op de opgegeven gebeurtenis, zodat wanneer deze gebeurtenis plaatsvindt, de handelingen van de functie worden uitgevoerd. Wanneer de gebeurtenis feitelijk plaatsvindt, controleert het gebeurtenisdoel het overzicht met alle functies en methoden die als gebeurtenislistener zijn geregistreerd. Vervolgens worden achtereenvolgens alle functies en methoden opgeroepen, waarbij het gebeurtenisobject als parameter wordt doorgegeven.

Als u een eigen gebeurtenislistener wilt maken, moet u vier dingen in deze code wijzigen. Ten eerste moet u de naam van de functie wijzigen in de naam die u wilt gebruiken (dit moet tweemaal gebeuren, op de plaats waar eventResponse ) staat. Vervolgens moet u de juiste klassennaam opgeven van het gebeurtenisobject dat wordt verzonden naar aanleiding van de gebeurtenis waarnaar u wilt luisteren ( EventType in de code) en moet u de juiste constante voor de specifieke gebeurtenis opgeven ( EVENT_NAME in het overzicht). Vervolgens moet u de methode addEventListener() aanroepen op het object waardoor de gebeurtenis wordt verzonden ( eventTarget in deze code). U kunt ook de naam wijzigen van de variabele die als parameter van de functie wordt gebruikt ( eventObject in deze code).

Belangrijke concepten en termen

De volgende lijst bevat belangrijke termen die u tijdens het schrijven van gebeurtenisafhandelingsroutines zult tegenkomen:

Bubbling
Bubbling vindt plaats voor bepaalde gebeurtenissen, zodat een bovenliggend weergaveobject kan reageren op gebeurtenissen die door de onderliggende objecten worden verzonden.

Bubblingfase
Het gedeelte van de gebeurtenisstroom waarin een gebeurtenis aan bovenliggende weergaveobjecten wordt doorgegeven. De bubblingfase vindt plaats na de vastleg- en doelfasen.

Vastlegfase
Het gedeelte van de gebeurtenisstroom waarin een gebeurtenis van het meest algemene doel aan het meest specifieke doelobject wordt doorgegeven. De vastlegfase vindt plaats voor de doel- en bubblingfasen.

Standaardgedrag
Bij sommige gebeurtenissen hoort gedrag dat normaal gesproken samen met de gebeurtenis optreedt. Dit wordt het standaardgedrag genoemd. Als een gebruiker bijvoorbeeld tekst in een tekstveld typt, treedt een tekstinvoergebeurtenis op. Het standaardgedrag voor die gebeurtenis is het feitelijke weergeven van het teken dat in het tekstveld was getypt. U kunt dit standaardgedrag echter wijzigen (als u om een of andere reden niet wilt dat het getypte teken wordt weergegeven).

Verzenden
Gebeurtenislisteners een melding geven dat een gebeurtenis heeft plaatsgevonden.

Gebeurtenis
Iets dat met een object gebeurt dat door dit object aan andere objecten kan worden doorgegeven.

Gebeurtenisstroom
Wanneer een gebeurtenis plaatsvindt die betrekking heeft op een object in het weergaveoverzicht (een object dat op het scherm wordt weergegeven), krijgen alle objecten die het betreffende object bevatten hiervan een melding. Hierna wordt door deze objecten een melding verzonden naar de bijbehorende gebeurtenislisteners. Dit proces begint in het werkgebied, waar het weergaveoverzicht wordt doorlopen tot het object wordt bereikt waarop de gebeurtenis betrekking had. Hierna wordt naar het werkgebied teruggekeerd. Dit proces wordt de gebeurtenisstroom genoemd.

Event-object
Een object dat informatie over een specifieke gebeurtenis bevat, dat bij het verzenden van de gebeurtenis naar alle listeners wordt verstuurd.

Gebeurtenisdoel
Het object waardoor een gebeurtenis daadwerkelijk wordt verzonden. Als de gebruiker bijvoorbeeld op een knop klikt die zich in een Sprite bevindt die zich op zijn beurt in het werkgebied bevindt, worden door al die objecten gebeurtenissen verzonden, maar is het gebeurtenisdoel gelijk aan het object waarop de gebeurtenis betrekking had, in dit geval de knop waarop werd geklikt.

Listener
Een object dat of een functie die zichzelf bij een object heeft geregistreerd, om aan te geven dat het op de hoogte moet worden gesteld wanneer een specifieke gebeurtenis plaatsvindt.

Doelfase
Het punt in de gebeurtenisstroom waarop een gebeurtenis het meest specifieke doel heeft bereikt. De doelfase vindt plaats tussen de vastleggings- en bubblingfasen.