Передача информации для файлов с загрузчиком - PullRequest
0 голосов
/ 12 января 2010

Я использую Loader для получения данных изображения из ByteArray. Проблема в том, что мне нужно хранить эти данные изображения с именем (которое известно заранее), как только оно будет передано полному обработчику. Поскольку операция асинхронная, я не могу быть уверен, какое из изображений множественных файлов завершит первую загрузку, поэтому мне кажется, что мне нужно каким-то образом передать информацию ... Я не могу найти какие-либо свойства Loader, которые бы передавали смутно полезная информация вместе.

Любые рекомендации о том, как я мог бы сделать это?

Ответы [ 4 ]

1 голос
/ 12 января 2010

Не могли бы вы просто использовать свойство Loader.name?

var ldr:Loader = new Loader();
ldr.name = 'name_of_the_loader';
ldr.contentLoaderInfo.addEventListener(Event.COMPLETE, loaderListener);
ldr.loadBytes(aByteArray);

...

function loaderListener(event:Event):void {
  trace('name of the completed loader is '+LoaderInfo(event.target).loader.name);
}

Не могли бы вы предоставить код?

0 голосов
/ 12 января 2010

Первым решением было бы использование словаря для сопоставления экземпляров Loader с именами. Как это:

private var names : Dictionary = new Dictionary();
...

var ldr : Loader = new Loader();
names [ ldr ] = 'someName';
ldr.contentLoaderInfo.addEventListener(Event.COMPLETE, loaderListener);
ldr.loadBytes(aByteArray);

...

function loaderListener(event:Event):void {
  trace('name of the completed loader is '+ names[ event.target ] );
}

Другим решением будет использование функтора, например:

var ldr : Loader = new Loader();
ldr.contentLoaderInfo.addEventListener(Event.COMPLETE, createListener( 'someName' ) );
ldr.loadBytes(aByteArray);

...

function createListener( imgName : String ) : Function {
    return function ( event : Event ) : void {
      trace('name of the completed loader is '+ imgName );
    }
}
0 голосов
/ 12 января 2010
private var loaders:Array = [];
private var names:Array = [];

    //inside loadImages method
    for(i = 0; i < len; i++)
    {
        var ldr:Loader = new Loader();
        //add listeners and call load
        loaders.push(ldr)
        names.push(name-of-ith-image);
    }

private function onLoadComplete(e:Event):void
{
    var index:Number = loaders.indexOf(LoaderInfo(e.target).loader);
    var requiredName:String = names[index];
    trace(requiredName);
}
0 голосов
/ 12 января 2010

loader.contentLoaderInfo.url будет иметь URL загруженного изображения (например, http://sometURL/image1.jpg).

...