Реализация IEventDispatcher в AS3 - PullRequest
1 голос
/ 03 июня 2011

Я раньше не использовал ключевое слово implements, и я пытался использовать его для реализации класса IEventDispatcher, чтобы посмотреть, позволит ли это использовать addEventListener() в классе, который расширяет Object (это мое понимание того, для чего это - поправьте меня, если я ошибаюсь).

Мой класс такой:

package
{
    import flash.events.Event;
    import flash.events.IEventDispatcher;

    public class Thing extends Object implements IEventDispatcher
    {
        public function Thing()
        {
            addEventListener(Event.ENTER_FRAME, _handle);
        }

        private function _handle(e:Event):void
        {
            trace('a');
        }
    }
}

Но это выдает стек ошибок:

1180: Вызов возможно неопределенным Метод addEventListener.
1044: Метод интерфейса addEventListener в Пространство имен flash.events:IEventDispatcher нет реализуется классом Thing.
1044: Метод интерфейса removeEventListener в пространстве имен flash.events:IEventDispatcher нет реализуется классом Thing.
1044: Метод интерфейса dispatchEvent в пространстве имен flash.events:IEventDispatcher нет реализуется классом Thing.
1044: Метод интерфейса hasEventListener в пространстве имен flash.events:IEventDispatcher нет реализуется классом Thing.
1044: Метод интерфейса willTrigger в Пространство имен flash.events:IEventDispatcher нет реализуется классом Thing.

Где я ошибся?

Ответы [ 2 ]

8 голосов
/ 03 июня 2011

, чтобы добавить к ответу jeremymealbrown, Adobe предоставляет пример в документации :

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

class DecoratedDispatcher implements IEventDispatcher {       
    private var dispatcher:EventDispatcher;

    public function DecoratedDispatcher() {
        dispatcher = new EventDispatcher(this);
    }

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

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

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

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

    public function willTrigger(type:String):Boolean {
        return dispatcher.willTrigger(type);
    }
}
4 голосов
/ 03 июня 2011

Проблема в том, что говорится в сообщении об ошибке. Вы не реализуете методы, определенные в интерфейсе IEventDispatcher. Если вы хотите использовать реализации, вы должны явно определить функции, объявленные в интерфейсе. Это означает, что вы действительно должны написать эти функции в своем классе. С другой стороны, если вы не хотите реализовывать пользовательские функции, вы можете просто расширить EventDispatcher.

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