AS3 удаление слушателей событий - PullRequest
2 голосов
/ 17 декабря 2010

У меня есть основной вопрос об удалении слушателей событий вручную в 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 ]

5 голосов
/ 17 декабря 2010

может быть попытаться сослаться на исходный объект через свойство "target" события? Я не пробовал, но что-то похожее на:

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

Но я могу быть полностью выключен.

2 голосов
/ 17 декабря 2010

Лучшей альтернативой является объявление FileReference в качестве переменной-члена и добавление EventHandler в конструктор. Вы можете удалить все EventHandlers в деструкторе.

0 голосов
/ 17 декабря 2010

Хорошей резервной копией является добавление слабой ссылки, чтобы слушатель удалялся и автоматически собирал мусор, когда на него не осталось ссылок, указывающих на него.

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

Однако всегда лучше убедиться, что вы удалили слушателя вручную.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...