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对象或是其上级对象上的话都能被触发。
作者:Jingle Guo
出处:http://www.cnblogs.com/studynote/
若标题中有“转载”字样,则本文版权归原作者所有。若无转载字样,本文版权归作者所有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利.