У меня странная проблема! Я пытаюсь удалить прослушиватель событий для объекта FileReference, вызвав функцию, но, похоже, ее не удаляют, и я не понимаю, почему.
Вот код:
private function clearFileUploadListeners(file:FileReference, index:String):void {
var dispatchEvent:Function = function(event:Event):void {
dispatch(event.type, event, index);
};
file.removeEventListener(Event.COMPLETE, dispatchEvent);
var bool:Boolean = file.hasEventListener(Event.COMPLETE);
if (bool)
trace("ERROR");
}
Когда я запускаю этот код, трассировка действительно происходит. Я не понимаю, почему это логическое значение возвращает true, когда я только что попытался удалить eventListener чуть выше! Наверное, я делаю что-то действительно глупое, потому что это кажется странной ошибкой.
Я надеюсь, что кто-то может помочь мне в этом вопросе.
EDIT:
Я считаю, что это связано с тем фактом, что функция dispatchEvent определяется внутри другой функции, когда я добавляю слушателя:
private function upload(file:FileReference, index:String):void {
var dispatchEvent:Function = function(event:Event):void {
dispatch(event.type, event, index);
};
file.addEventListener(Event.COMPLETE, dispatchEvent);
}
Проблема в том, что мне нужно получить доступ к этой «индексной» переменной из прослушивателя, и я не могу установить ее как глобальную переменную, поскольку каждый файл имеет свой собственный индекс, и это бремя, если мне нужно расширять каждый класс событий отслеживать индекс (Event, ProgressEvent, ..). Я надеюсь, что кто-то может помочь мне в этом.
EDIT2:
Я действительно нашел временное решение, я не уверен, что оно лучшее! Я поместил свой метод removeListener фактически в метод загрузки, но сделал его переменной. Поскольку AS3 допускает динамический объект, я прикрепил этот метод к одному из моих объектов, и поэтому я просто вызываю ссылку на метод, когда это необходимо. Событие фактически удалено. Это хорошее решение, пожалуйста?
Большое спасибо,
Rudy