如何从显示对象中删除所有事件侦听器?

Sov*_*iut 10 flash events event-handling actionscript-3

有没有办法确定哪些事件监听器在显示对象中注册?我想从显示对象中删除所有事件侦听器,以便我可以根据应用程序中的上下文更改分配新的事件侦听器.

And*_*obs 8

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)


bac*_*dos 7

jeceuyper是对的......

但不是:DisplayObject扩展EventDispatcher,已经实现了IEventDispatcher...所以更准确:你需要覆盖addEventListenerremoveEventListener跟踪听众......

一些技术细节:我建议您使用Dictionary存储处理函数...插入速度稍慢,但删除速度要快得多......同时,Dictionary支持弱引用,这对于事件处理来说非常重要...还要记住,这useCapture允许两次添加相同的处理程序...

那么祝你好运吧 ... ;)