dispatchEvent в статическом классе - AS3 - PullRequest
8 голосов
/ 06 января 2012

Хороший простой способ начать день!

Я не могу использовать dispatchEvent в своем static class, мне было интересно, знает ли кто-нибудь, как я могу достичь подобной функциональности или вообще возможно ли этовызвать dispatchEvent из моего статического класса?

В основном я хочу сообщить свой код сценария действия во флеш-файле, когда функциональность моего статического класса будет завершена.

Спасибо,

Ответы [ 5 ]

12 голосов
/ 06 января 2012

После прочтения ответов и понимания того, чего я могу достичь, я реализовал следующее (подумал, что это поможет пользователям в будущем, если они увидят какой-то пример кода).

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);
}
4 голосов
/ 10 февраля 2014

Вместо использования статических методов из статического класса.Вы можете использовать это так.

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 !!")
}
4 голосов
/ 06 января 2012

Статические классы (классы со статическими свойствами и методами) не могут наследовать обычные методы уровня экземпляра и не могут реализовывать интерфейсы со статическими методами. Так что ваш public static function dispatchEvent не может принять участие в EventDispatcher или IEventDispatcher.

Вы можете создать те же статические методы, что и в IEventDispatcher, а затем создать статический экземпляр IEventDispatcher для обработки событий, но сам ваш статический класс не может быть EventDispatcher, но может выглядеть только аналогично.

2 голосов
/ 06 января 2012

Один прямой обходной путь, который я вижу, состоит в том, чтобы иметь статическую переменную для вашего EventDispatcher - всякий раз, когда вы вызываете addEventListener, вы присоединяете его к вашему EventDispatcher - всякий раз, когда вы хотите запустить / отправить событие, выскажи так своему EventDispatcher.

1 голос
/ 06 января 2012

Вы бы использовали закрытую переменную _dispatcher: EventDispatcher и реализовали интерфейс IEventDispatcher.

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

Затем вы можете направить события через диспетчер. Дайте мне знать, если этого достаточно, чтобы вы пошли.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...