Во Flex я могу передать дополнительный параметр событию обратного вызова и оценить его раньше? - PullRequest
1 голос
/ 30 июня 2011

Например:

for(var i:int=0; i<someArray.length; i++)
{
    var loader:Loader=new Loader();
    loader.load(new URLRequest("http://testurl.com/test.jpg"));
    loader.contentLoaderInfo.addEventListener(Event.COMPLETE, function(e:Event):void{imageLoaded(e,i)});
}

Второй параметр (i) для imageLoaded всегда равен 1, я думаю, потому что я больше не существует и по умолчанию равен 1. Возможно ли получить второй параметр для оценки при запуске загрузки, а не при завершении?

Ответы [ 2 ]

3 голосов
/ 30 июня 2011

Это должно быть выполнимо, используя конструкцию динамической функции Flex.Прочтите статью, которую я опубликовал на , как передать дополнительные параметры прослушивателю событий .

2 голосов
/ 30 июня 2011

Проблема не в том, что i уже существует, а в том, что существует только одна его копия - к моменту выполнения обратного вызова из первой итерации значение i в вашем стековом кадре изменилось.Один из способов обойти это - сгенерировать вашу функцию в отдельном кадре стека:

private function makeCallback(i:int):Function {
    return function(e:Event):void {imageLoaded(e,i);};
}

public function frob():void {
    for(var i:int=0; i<someArray.length; i++)
    {
        var loader:Loader=new Loader();
        loader.load(new URLRequest("http://testurl.com/test.jpg"));
        loader.contentLoaderInfo.addEventListener(Event.COMPLETE, makeCallback(i));
    }
}
...