ActionScript3(AS3)类库学习之(五)——EventDispatcher事件分发和监听

EventDispatcher类是处理Event事件的一个重要的基类,通过继承这个类或者实现IEventDispatcher接口,我们才能实现事件的分发和监听。

一.自定义消息处理类
1.通过继承EventDispatcher类来使用该类中消息处理的方法。这个方法最简单


2.如果我们自定义的类需要继承自别的类,那么我们就需要通过实现IEventDispatcher接口来实现自己的消息处理类,如下例:

class MyDispatcher implements IEventDispatcher {       

    private var dispatcher:EventDispatcher;

               

    public function MyDispatcher() {

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

    }

}



二.消息的分发和监听
1.EventDispatcher类使用dispatchEvent()函数来分发消息。


2.使用addEventListener来增加监听者,需要注意的useCapture的值默认为false,这时只监听Targeting,Bubbling阶段的消息,当它为true时只能监听Capturing阶段的消息,如果想要三个阶段的消息都进行监听,则需要addEventListener两次。


3.使用addEventListener来增加监听者,对于同一类型,同一阶段,同一目标对象的消息,同一监听函数只能添加一次,多次添加不起作用。


4.在使用addEventListener增加监听者时,可以用priority参数确定监听函数执行的顺序,值越大,优先级越高。


5.在不需要监听者时,需要调用removeEventListener()函数来取消监听,否则只要事件存在,AS3就不会自动释放内存,除非将参数useWeakReference设为true。


6.在调用removeEventListener()函数时,事件的类型和useCapture参数一定要和addEventListener相对应。

三.判别是否监听者是否存在
EventDispatcher类有两个函数来判断监听者的存在性。
1.hasEventListener:判断当前EventDispatcher对象是否存在指定类型的监听器,该监听器需要是注册在当前EventDispatcher对象上,和它的上级对象是否有注册该监听器无关


2.willTrigger:顾名思义,是指若目标对象是否能触发指定类型的监听器,这时,该监听器注册在当前EventDispatcher对象或是其上级对象上的话都能被触发。

你可能感兴趣的:(actionscript)