PDA

Просмотр полной версии : Как передать параметр обработчику событий


babuia
24.07.2012, 21:37
Здравствуйте.
Пишу код который взял бы выбранные фото и отправил бы их в JS, и столкнулся с проблемой, не знаю как передать переменную i. С помощью пользовательских событий так ничего и не смог придумать, пробовал и другие варианты но так ничего и не вышло.

public function onSelect(e:Event):void
{
/* files это объект FileReferenceList */

for(var i:int = 0; i < files.fileList.length; i++)
{
files.fileList[i].addEventListener(Event.COMPLETE, onFileLoaded);
files.fileList[i].load();
}
}

public function onFileLoaded(e:Event):void
{
/* Тут байт массив передается виде строки */

ExternalInterface.call("get_photo", Base64.encode(files.fileList[i].data)); // Как получить переменную i из функции onSelect
}

Если сделать переменную i глобальной на уровне класса, то функция onFileLoaded получит значения i на текущий момент а не на момент отправки.

Есть ли какой нибудь способ сделать что-то типа этого?
files.fileList[i].addEventListener(Event.COMPLETE, onFileLoaded(i));

illuzor
24.07.2012, 22:19
public function onFileLoaded(e:Event):void
{
ExternalInterface.call("get_photo", Base64.encode(e.target.data)); // переменная i тут не нужна
}
Если не прокатит: Base64.encode ... ((e.target as YourType).data) ... // YourType - ваш тип данных, который в массиве files.fileList

bav
24.07.2012, 22:40
Почитайте у -De- (http://www.flasher.ru/forum/blog.php?b=239)

gagaga
25.07.2012, 00:20
public class CustomEvent extends Event {
public static var MY_CUSTOM_EVENT:String = "myCustomEvent";
public var myCustomEventParameter:Number;
public function CustomEvent(type:String, bubbles:Boolean = false, cancelable:Boolean = false, ...params) {
super(type, bubbles, cancelable);
switch(type) {
case MY_CUSTOM_EVENT:
myCustomEventParameter = params[0];
break;
}
}
}

диспатчится так:

dispatchEvent(new CustomEvent(CustomEvent.MY_CUSTOM_EVENT, 25.01)); // 25.01 ваш параметр


Добавлено через 6 минут
копипастм не копипастте, писал на коленке

expl
25.07.2012, 00:34
Опять 0_o
http://www.google.ru/search?q=site%3Aflasher.ru+%D0%9A%D0%B0%D0%BA+%D0%BF%D0%B5%D1%80%D0%B5%D0%B4%D0%B0%D1%82%D1%8C+%D0%BF%D0%B0%D1%80%D0%B0%D0%BC%D0%B5%D1%82%D1%80+%D0%BE %D0%B1%D1%80%D0%B0%D0%B1%D0%BE%D1%82%D1%87%D0%B8%D0%BA%D1%83+%D1%81%D0%BE%D0%B1%D1%8B%D1%82%D0%B8%D0%B9
Этот вопрос просто преследует этот форум.

dimarik
25.07.2012, 00:44
Опять 0_o
http://www.google.ru/search?q=site%3Aflasher.ru+%D0%9A%D0%B0%D0%BA+%D0%BF%D0%B5%D1%80%D0%B5%D0%B4%D0%B0%D1%82%D1%8C+%D0%BF%D0%B0%D1%80%D0%B0%D0%BC%D0%B5%D1%82%D1%80+%D0%BE %D0%B1%D1%80%D0%B0%D0%B1%D0%BE%D1%82%D1%87%D0%B8%D0%BA%D1%83+%D1%81%D0%BE%D0%B1%D1%8B%D1%82%D0%B8%D0%B9
Этот вопрос просто преследует этот форум.

Результатов: примерно 183 (0,10 сек.)

babuia
26.07.2012, 20:31
E.target конечно работает но он не решает задачу целиком, дело в том что задачу я
упростил, и получилось что с упрощенным вариантом(описанный здесь) он справляется а в целом нет,
вообщем это мой косяк.
Для того чтоб решить задачу мне нужно ответить на другой вопрос - задам его в другой теме.
Всем спасибо.