2010-12-17 2 views
2

У меня есть основной вопрос вручную извлекая слушатель событий в ActionScript 3.AS3 удаления слушателей событий

Если у меня есть функция, как:

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); 
    } 

ответ

5

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

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

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

+0

Спасибо! Кажется, это работает. – Hooskersixer 2010-12-17 01:22:19

2

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

+0

Ах спасибо за вход. Я много делал, но не знал, какая из них лучше. Я знаю, что я плохо разбираюсь в flash и AS3, но мой код кажется беспорядочным в любом случае. Тонна переменных-членов просто использовалась для того, чтобы событие становилось запутанным. – Hooskersixer 2010-12-17 01:36:38

0

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

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

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

Смежные вопросы