Sov*_*iut 10 flash events event-handling actionscript-3
有没有办法确定哪些事件监听器在显示对象中注册?我想从显示对象中删除所有事件侦听器,以便我可以根据应用程序中的上下文更改分配新的事件侦听器.
back2dos已经提到了你应该使用的方法,我所做的是扩展movieclip类并实现我每天使用但不属于movieclip类的各种函数.包括addEventListener类的重写
protected var listeners : Dictionary = new Dictionary();
override public function addEventListener( type : String, listener : Function, useCapture : Boolean = false, priority : int = 0, useWeakReference : Boolean = true) : void
{
var key : Object = {type:type,useCapture:useCapture};
if( listeners[ key ] ) {
removeEventListener( type, listeners[ key ], useCapture );
listeners[ key ] = null;
}
listeners[ key ] = listener;
super.addEventListener( type, listener, useCapture, priority, useWeakReference );
}
protected function removeListeners () : void
{
try
{
for (var key:Object in listeners) {
removeEventListener( key.type, listeners[ key ], key.useCapture );
listeners[ key ] = null;
}
}catch(e:Error){}
}
Run Code Online (Sandbox Code Playgroud)
jeceuyper是对的......
但不是:DisplayObject扩展EventDispatcher,已经实现了IEventDispatcher...所以更准确:你需要覆盖addEventListener并removeEventListener跟踪听众......
一些技术细节:我建议您使用Dictionary存储处理函数...插入速度稍慢,但删除速度要快得多......同时,Dictionary支持弱引用,这对于事件处理来说非常重要...还要记住,这useCapture允许两次添加相同的处理程序...
那么祝你好运吧 ... ;)