Loader を使用して、ByteArray から画像データを取得しています。問題は、画像データが完全なハンドラーに渡されたら、その画像データを名前 (事前にわかっている) で保存する必要があることです。操作が非同期なので、multiple のどのイメージが最初にロードを完了するかがわからないので、何らかの方法で情報を渡す必要があるようです...漠然と役立つ情報が一緒に。
これを達成する方法に関する推奨事項はありますか?
Loader を使用して、ByteArray から画像データを取得しています。問題は、画像データが完全なハンドラーに渡されたら、その画像データを名前 (事前にわかっている) で保存する必要があることです。操作が非同期なので、multiple のどのイメージが最初にロードを完了するかがわからないので、何らかの方法で情報を渡す必要があるようです...漠然と役立つ情報が一緒に。
これを達成する方法に関する推奨事項はありますか?
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);
}
コードを教えていただけますか?
最初の解決策は、Dictionary を使用して 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 );
}
}
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);
}
loader.contentLoaderInfo.url
ロードされた画像のURLが含まれます(例:http://sometURL/image1.jpg)。