有没有一种方法,以消除听众更容易? [英] Is there a way to remove listeners easier?

查看:107
本文介绍了有没有一种方法,以消除听众更容易?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

所以,看到一只简单的方法从容器中取出所有的孩子的像这样

so, there´s a easy way to remove all childs from container like this

while (container.numChildren)
{
    container.removeChildAt(0);
}

有没有办法来消除stage.eventListener复数(不知道是否使用im字右),像stage.eventListeners?类似的东西?

is there a way to remove stage.eventListener in plural (dont know if im using the word right), something like stage.eventListeners? something like that?

谢谢!

推荐答案

没有,没有。没有机制,至少可公开获得的,用于跟踪事件侦听器。但是,你可以自己做。

No, there isn't. There is no mechanism, at least publicly available, that keeps track of event listeners. However, you could do it yourself.

基本上,你需要不断添加的每个听者的轨道。最简单的方法是将扩展要在做到这一点,并覆盖类的addEventListener()

Basically, you need to keep track of each listener that is added. The easiest way would be to extend the classes you want to do this on and override addEventListener().

private var listeners:Vector.<Object>;

override public function addEventListener( type:String, listener:Function, useCapture:Boolean = false, priority:int = 0, useWeakReference:Boolean = false ):void {
    var obj:Object = {
        type : type,
        listener : listener
    };
    this.listeners.push( obj );
    super.addEventListener( type, listener, useCapture, priority, useWeakReference );
}

override public function removeEventListener( type:String, listener:Function, useCapture:Boolean = false ):void {
    var i:Number, l:Number;
    l = this.listeners.length;

    for ( i = 0; i < l; i++ ) {
        if ( this.listeners[i].type == type && this.listeners[i].listener == listener ) {
            this.listeners.splice( i, 1 );
            break;
        }
    }

    super.removeEventListener( type, listener, useCapture );
}

public function removeAllEventListeners():void {
    var i:Number, l:Number;
    l = this.listeners.length;

    for ( i = 0; i < l; i++ ) {
        super.removeEventListener( this.listeners[i].type, this.listeners[i].listener );
    }
    this.listeners.splice( 0, this.listeners.length ); //empties the vector
}

如果扩展一个类是不适合你的选择(或者是因为在使用Flash专业版的时间表,或者如果您需要删除所有事件侦听器的阶段),你可以手动将其每次添加到Vector您添加事件侦听器。这不是那么简单,因为我上面描述的方式,但它仍然可以工作。

If extending a class is not an option for you (either because you are using Flash Pro with the timeline or if it's the stage you need to remove all event listeners from), you could manually add it to the Vector each time you add an event listener. It's not quite as simple as the way I described above, but it would still work.

请注意,你应该在将useCapture 属性添加到正在保存的对象,并检查该为好,但我说实话从来没有设置该属性的任何东西但默认情况下,所以我并没有包括在我的code

Do note that you should probably add the useCapture property to the object that is being saved and check for that as well, but I have honestly never set that property to anything but default so I did not include it in my code

这篇关于有没有一种方法,以消除听众更容易?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆