AS3删除事件侦听器

时间:2010-12-17 01:06:53

标签: flash actionscript-3 event-handling addeventlistener

我有一个关于在actionscript 3中手动删除事件监听器的基本问题。

如果我有以下功能:

    private function doStuff(event : Event):void
    {

        //let them save
        var f:FileReference = new FileReference();
        f.addEventListener(Event.COMPLETE,saveDone);
        f.save(mp3Encoder.mp3Data,"output.mp3");

    }

调用saveDone函数时如何删除事件侦听器?通常我只需将“添加”更改为“删除”,如:

f.removeEventListener(Event.COMPLETE,saveDone);

然而,f是一个局部变量,在doStuff函数结束后我无法达到它。

    private function saveDone(ev:Event){
        f.removeEventListener(Event.COMPLETE,saveDone);
    }

3 个答案:

答案 0 :(得分:5)

也许尝试通过事件的“目标”属性引用原始对象?我没有尝试过,但类似于:

private function saveDone(ev:Event){
var originalFR:FileReference = ev.target as FileReference;    
originalFR.removeEventListener(Event.COMPLETE, saveDone);
}

但我可能完全离开了。

答案 1 :(得分:2)

更好的选择是将FileReference声明为成员变量,并在构造函数中添加EventHandler。您可以删除析构函数中的所有EventHandlers

答案 2 :(得分:0)

添加弱引用也是一个很好的备份,以便在没有引用指向它的情况下删除侦听器并自动收集垃圾。

f.addEventListener(Event.COMPLETE,saveDone,false,0,true);

但是,最好确保手动删除监听器。