Flex - Отправка пользовательского события при получении стандартного события
Я обрабатываю FileReferenceList.fileList[] нескольких файлов, которые пользователь выбирает в следующем коде.
for (i=0;i < event.currentTarget.fileList.length; i ++){
fileByteData = new ByteArray();
fileByteData = (event.currentTarget.fileList[i].data as ByteArray);
loader = new Loader();
loader.contentLoaderInfo.addEventListener(Event.COMPLETE, checkImageDimensions);
loader.loadBytes(fileByteData);
}
Мне нужно передать i в checkImageDimensions, чтобы отследить, какое изображение есть, я могу достаточно легко создать пользовательское событие, но мне нужно, чтобы оно запускалось в нужное время. В идеале я мог бы сделать что-то вроде этого..
var myEvent:CustomEvent = new CustomEvent(i);
loader.contentLoaderInfo.addEventListener(Event.COMPLETE, this.dispatchEvent(CustomEvent))
Но если честно, я не уверен, как поступить...
Может кто-нибудь мне помочь? Спасибо!
1 ответ
Вам нужно сделать функцию слушателя - вызова функции недостаточно. Передача имени класса dispatchEvent
тоже не работает. Вот как это сделать.
loader.contentLoaderInfo.addEventListener(Event.COMPLETE, function(e:Event):void {
dispatchEvent(new CustomEvent(i));
});
Обратите внимание, что вам не обязательно нужен собственный класс события, если все, что вам нужно в событии, это строка типа. Вы можете просто использовать класс Event в этом случае:
public static const MY_CUSTOM_EVENT:String = "myCustomEvent";
...
loader.contentLoaderInfo.addEventListener(Event.COMPLETE, function(e:Event):void {
dispatchEvent(new Event(MY_CUSTOM_EVENT));
});
Изменить: Если вы действительно ленивый, но все еще хотите передать значения с событием, вы можете использовать DinamicEvent
учебный класс:
var evt:DynamicEvent = new DynamicEvent(MY_CUSTOM_EVENT);
evt.attr1 = val1;
evt.attr2 = val2;
dispatchEvent(evt);
Конечно, декларировать свой собственный класс ошибок проще и менее подвержен ошибкам.