Передача информации для файлов с помощью загрузчика

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

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


person grey    schedule 12.01.2010    source источник


Ответы (3)


Не могли бы вы просто использовать свойство 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);
}

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

person kkyy    schedule 12.01.2010
comment
Да, это работает. Вчера у меня были проблемы с этим, так что спасибо, что прояснили это. Отметив это как лучшее решение на данный момент, поскольку оно требует наименьшего количества кода. Спасибо. - person grey; 12.01.2010

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

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 );
    }
}
person Creynders    schedule 12.01.2010

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

person bhups    schedule 12.01.2010
comment
Нет, если данные изображения поступают из массива байтов, как указано в операторе. - person kkyy; 12.01.2010
comment
Как уже упоминалось, в данном случае это не работает, а свойство URL доступно только для чтения. - person grey; 12.01.2010