ActionScript-versioner före ActionScript 3.0 erbjuder en rad olika sätt att hantera händelser på, bland annat följande:
-
on()
-händelsehanterare som kan placeras direkt i Button- och MovieClip-instanser
-
onClipEvent()
-hanterare som kan placeras direkt i MovieClip-instanser
-
Återkallningsfunktionsegenskaper som
XML.onload
och
Camera.onActivity
-
Händelseavlyssnare som du registrerar med hjälp av metoden
addListener()
-
Klassen UIEventDispatcher som delvis implementerade DOM-händelsemodellen.
Var och en av dessa mekanismer har sin egen uppsättning fördelar och begränsningar. Hanterarna
on()
och
onClipEvent()
är enkla att använda, men gör senare underhåll av projektet svårare eftersom kod som har placerats direkt i knappar och filmklipp kan vara svåra att hitta. Återkallningsfunktioner är också enkla att implementera, men begränsar dig så att du bara kan använda en återkallningsfunktion för en given händelse. Händelseavlyssnare är svårare att implementera eftersom de inte bara kräver att ett avlyssnarobjekt och en avlyssnarfunktion skapas, utan även kräver att avlyssnaren registreras med objektet som genererar händelsen. Det här extraarbetet gör dock att du kan skapa flera avlyssnarobjekt och registrera dem alla för samma händelse.
Utvecklingen av komponenter för ActionScript 2.0 gav upphov till ytterligare en händelsemodell. Den nya modellen, i form av klassen UIEventDispatcher, grundades på en deluppsättning av DOM-händelsespecifikationen. Utvecklare som är insatta i händelsehantering kommer därför inte att ha några större problem att gå över till den nya ActionScript 3.0-händelsemodellen.
Tyvärr sammanfaller syntaxen som används av de olika händelsemodellerna på olika sätt, och skiljer sig åt på andra sätt. I ActionScript 2.0 kan till exempel vissa egenskaper, som
TextField.onChanged
, användas antingen som en återkallningsfunktion eller som en händelseavlyssnare. Syntaxen för att registrera avlyssnarobjekt skiljer sig däremot åt beroende på om du använder någon av de sex klasser som stöder avlyssnare eller klassen UIEventDispatcher. För klasserna Key, Mouse, MovieClipLoader, Selection, Stage och TextField använder du metoden
addListener()
, men för komponenthändelsehantering använder du en metod som heter
addEventListener()
.
En annan svårighet som de olika händelsehanteringsmodellerna introducerade var att omfånget på händelsehanteringsfunktionen varierade avsevärt beroende på vilken mekanism som användes. Innebörden av nyckelordet
this
var med andra ord inte konsekvent mellan de olika händelsehanteringssystemen.