Передать параметр в Complete Event - Adobe Flex - PullRequest
0 голосов
/ 04 апреля 2011

Я использую HTTP-запрос для загрузки изображения в двоичном формате.Когда загрузка будет завершена, я хочу обработать ее, но я также хочу передать идентификатор изображения функции полного обработчика ... как это сделать?

var loader:URLLoader = new URLLoader();

for(var i:int = 0 ; i<5; i++){

    /* When completed I want to access the variable "i" */
    loader.addEventListener(Event.complete, completeHandler);
    loader.load(/* a url request */);
}

private function completeHandler(event:Event):void
{
     /* I want to access the passed parameter "i" so 
      it is the same as it was when the eventListener was added, 0,1,2,3 or 4 */

 }

Возможно ли это?Я пытался расширить Event, но хочу обработать событие COMPLETE

Спасибо, Фил

Ответы [ 2 ]

4 голосов
/ 04 апреля 2011

Это должно быть возможно при использовании конструкции динамической функции Flex. Аналогичный вопрос был задан здесь и здесь .

Вот пример:

Параметры и обработчик:

var parameters:String = "Some parameter I want to pass";

private function loadLocalData(e:Event, parameter:String):void
{
  // voila, here's your parameter
}

private function addArguments(method:Function, additionalArguments:Array):Function 
{
  return function(event:Event):void {method.apply(null, [event].concat(additionalArguments));}
}

Использование в вашем примере:

for(var i:int = 0 ; i<5; i++){

    /* When completed I want to access the variable "i" */
    loader.addEventListener(Event.complete, addArguments(completeHandler, [i]));
    loader.load(/* a url request */);
}

private function completeHandler(event:Event, id:int):void
{
     /* I want to access the passed parameter "i" so 
      it is the same as it was when the eventListener was added, 0,1,2,3 or 4 */

}
0 голосов
/ 29 марта 2012

точно - дополнительный метод addArguments (...) - лучшее решение, я использую это то же самое, но оно называется passParameters

public function passParameters(method:Function,additionalArguments:Array):Function
{return function(event:Event):void{
    method.apply(null, [event].concat(additionalArguments));}
}

объяснение здесь - это просто и всегда работает http://sinfinity.pl/blog/2012/03/28/adding-parameters-to-event-listener-in-flex-air-as3/

...