AS3 101: Quick Tips - Dispatching Hendelser uten å utvide EventDispatcher
Del
Del
3
Del
Dette cyber Monday Envato Tuts + kurs vil bli redusert til bare $ 3. Ikke gå glipp av
Dette innlegget er en del av en serie som heter AS3 101.AS3 101. Events - Basix
Det er sjelden, men det skjer. Noen ganger vil du absolutt trenger å forlenge en klasse, og at klassen ikke allerede forlenge EventDispatcher. Samtidig, du absolutt trenger din klasse for å være en EventDispatcher. Fordi Actionscript 3 ikke tillater multippel arv, hvordan kan du forene dette?
I andre situasjoner, kanskje du ønsker å lage en klasse som har en haug med statiske metoder på det, og er egentlig ikke ment å instansieres. Du ønsker å være i stand ekspedere hendelser fra denne klassen også, men du kan utvide EventDispatcher fordi det gjør det mulig instansmetoder, ikke klassemetoder.
La oss ta en titt på hvordan man skal oppnå disse målene.
< hr> Trinn 1: Hvordan gjøre det
løsningen er i begge tilfeller på å bruke, henge på, og bruke en EventDispatcher objekt. Det vil si at en ny EventDispatcher () objekt, ikke nødvendigvis noen av dens subklasser. Når det gjelder ønsker å utvide noe annet, kan du også ha din klasse implementere IEventDispatcher grensesnittet
Den prosessen går noe sånt som dette:.
Implementere IEventDispatcher (ikke for statisk klasse)
pakke {import flash.events *..; public class ArrayDispatcher strekker Array implementerer IEventDispatcher {offentlig funksjon ArrayDispatcher () {}}}
Opprett en ny EventDispatcher objekt, og lagre den i en eiendom
privat Var _dispatcher. EventDispatcherpublic funksjon ArrayDispatcher ( ) {_dispatcher = new EventDispatcher ();}
Implementere metoder definert av IEventDispatcher, og bare vikle rundt tilpasningsmetoden på EventDispatcher eksempel
offentlig funksjon addEventListener (type:. String, lytteren : funksjon, useCapture: Boolean = false, prioritet: int = 0, useWeakReference: Boolean = false): void {_dispatcher.addEventListener (type, listener, useCapture, prioritet, useWeakReference);} offentlig funksjon dispatchEvent (hendelse: hendelse): Boolean {return _dispatcher.dispatchEvent (event);} offentlig funksjon hasEventListener (type: String): Boolean {return _dispatcher.hasEventListener (type);} offentlig funksjon removeEventListener (type: String, lytteren: funksjon, useCapture: Boolean = false): void {_dispatcher.removeEventListener (type, lytter, useCapture);} offentlig funksjon willTrigger (type: String): Boolean {return _dispatcher.willTrigger (type);}
Trinn 2: En Statisk EventDispatcher
For referanse, implementere dette i en statisk klasse kan se slik ut:.
pakke {import flash.events *; public class StaticDispatcher {private static Var _dispatcher: EventDispatcher = new EventDispatcher (); public static funksjon addEventListener (type: String, lytteren: Funksjon, useCapture: Boolean = false, prioritet: int = 0, useWeakReference: Boolean = false): void {_dispatcher.addEventListener (type, listener, useCapture, prioritet, useWeakReference); } Public static funksjon dispatchEvent (hendelse: Hendelse): Boolean {return _dispatcher.dispatchEvent (event); } Public static funksjon hasEventListener (type: String): Boolean {return _dispatcher.hasEventListener (type); } Public static funksjon removeEventListener (type: String, lytteren: Funksjon, useCapture: Boolean = false): void {_dispatcher.removeEventListener (type, lytter, useCapture); } Public static funksjon willTrigger (type: String): Boolean {return _dispatcher.willTrigger (type); }}}
Legg merke til at det ikke strekker seg eller redskaper, alle medlemmer er nå statiske, og _dispatcher eiendommen er nå opprettet direkte på eiendommen, i stedet for i konstruktøren (fordi det er ingen konstruktør).
< hr> det er alt
Selv om raske til å forklare, er dette definitivt en avansert teknikk, og du sannsynligvis ikke vil kreve det hvis du er på et punkt der utsending dine egne arrangementer er fortsatt et nytt konsept. Men sende dette bort et sted i tankene dine slik at du kan komme tilbake til dette eksemplet når du trenger det.