2012-01-06 20 views
8

¡Una buena y sencilla para comenzar el día!dispatchEvent en la clase estática - AS3

No puedo usar dispatchEvent en mi static class, me preguntaba si alguien sabía cómo puedo lograr una funcionalidad similar o si es posible llamar a dispatchEvent desde mi clase estática?

Básicamente quiero informar el código de mi script de acción en mi archivo flash cuando la funcionalidad en mi clase estática está completa.

Gracias,

Respuesta

12

Después de leer las respuestas y obtener una comprensión de lo que puedo lograr, he implementado lo siguiente (pensé que ayudaría a los usuarios en el futuro si pudieran ver algún código de ejemplo).

private static var dispatcher:EventDispatcher = new EventDispatcher(); 

public static function addEventListener(type:String, listener:Function, useCapture:Boolean = false, priority:int = 0, useWeakReference:Boolean = false):void { 
    dispatcher.addEventListener(type, listener, useCapture, priority, useWeakReference); 
} 

public static function removeEventListener(type:String, listener:Function, useCapture:Boolean = false):void { 
    dispatcher.removeEventListener(type, listener, useCapture); 
} 

public static function dispatchEvent(event:Event):Boolean { 
    return dispatcher.dispatchEvent(event); 
} 

public static function hasEventListener(type:String):Boolean { 
    return dispatcher.hasEventListener(type); 
} 
1

Se podría utilizar una variable privada _dispatcher: EventDispatcher e implementar la interfaz IEventDispatcher.

Usted puede encaminar entonces los eventos a través del despachador. Avísame si esto es suficiente para que empieces.

2

Una solución directa que puedo ver es tener una variable estática sea a su EventDispatcher - cada vez que reciba addEventListener llamada, lo conecta a su EventDispatcher - siempre que lo desee para disparar/distribuir un evento, te dice lo que a su EventDispatcher .

4

Las clases estáticas (clases con propiedades y métodos estáticos) no pueden heredar métodos ordinarios de nivel de instancia y no pueden implementar interfaces con métodos estáticos. Por lo tanto, su public static function dispatchEvent no puede tomar parte en EventDispatcher o IEventDispatcher.

puede crear los mismos métodos estáticos como en IEventDispatcher y luego crear una instancia estática de IEventDispatcher para controlar los eventos, sino su propia clase estática no puede ser EventDispatcher pero sólo puede mirar el similar.

4

En lugar de utilizar métodos estáticos de la clase estática. Podrías usar de esta manera.

import flash.events.EventDispatcher; 
    import flash.events.Event; 

    public class StaticClass extends EventDispatcher { 
     public static var STATICCLASS:StaticClass = new StaticClass(); 
     public function StaticClass() { 
      // constructor code 

     } 

     public function dispatchEventFromStaticClass():void 
     { 
      dispatchEvent(new Event("Event_Dispatched")); 
     } 

    } 

se puede escuchar en otro lugar como este

StaticClass.STATICCLASS.addEventListener("Event_Dispatched", onHandler); 
StaticClass.STATICCLASS.dispatchEventFromStaticClass() 
function onHandler(e:Event):void 
{ 
    trace("Hey !!") 
} 
+0

vaca Santo, no tiene idea de lo mucho que esto me ayudó! ¡Thnx! – theseal53

+0

eres bienvenido :) –