静态类中的dispatchEvent - AS3

时间:2012-01-06 10:39:24

标签: flash actionscript-3

开始新的一天很简单!

我无法在dispatchEvent中使用static class,我想知道是否有人知道如何实现类似的功能,或者是否可以从我的静态类中调用dispatchEvent?

当我的静态类中的功能完成时,我基本上想要在我的flash文件中通知我的动作脚本代码。

谢谢,

5 个答案:

答案 0 :(得分:12)

在阅读答案并了解我可以实现的目标之后,我已经实现了以下内容(如果他们能够看到一些示例代码,我认为它将来会帮助用户)。

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 :(得分:4)

静态类(具有静态属性和方法的类)不能继承普通的实例级方法,也不能使用静态方法实现接口。因此,public static function dispatchEvent无法参与EventDispatcherIEventDispatcher

您可以创建与IEventDispatcher中相同的静态方法,然后创建一个IEventDispatcher的静态实例来处理事件,但您的静态类本身不能是EventDispatcher但只能看类似的。

答案 2 :(得分:4)

而不是使用静态类中的静态方法。你可以这样使用。

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"));
        }

    }
你可以在其他地方听这个

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

答案 3 :(得分:2)

我可以看到的一个直接解决方法是将静态变量添加到EventDispatcher - 无论何时调用addEventListener,都会将其附加到EventDispatcher - 每当您想要开火时/发送一个事件,你告诉你EventDispatcher

答案 4 :(得分:1)

您将使用私有变量_dispatcher:EventDispatcher并实现IEventDispatcher接口。

http://help.adobe.com/en_US/FlashPlatform/reference/actionscript/3/flash/events/IEventDispatcher.html

然后,您可以通过调度程序路由事件。如果这足以让你继续,请告诉我。