我正在使用 Loader 从 ByteArray 中获取图像数据。问题是,一旦将图像数据传递给完整的处理程序,我就需要使用名称(事先已知)来存储该图像数据。由于操作是异步的,我无法确定多个图像的哪个图像将首先完成加载,所以似乎我需要以某种方式传递信息......我似乎找不到任何通过任何加载器的属性依稀有用的信息。
关于我如何做到这一点的任何建议?
我正在使用 Loader 从 ByteArray 中获取图像数据。问题是,一旦将图像数据传递给完整的处理程序,我就需要使用名称(事先已知)来存储该图像数据。由于操作是异步的,我无法确定多个图像的哪个图像将首先完成加载,所以似乎我需要以某种方式传递信息......我似乎找不到任何通过任何加载器的属性依稀有用的信息。
关于我如何做到这一点的任何建议?
你不能只使用该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);
}
你能提供一些代码吗?
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);
}
第一个解决方案是使用 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 );
}
}
loader.contentLoaderInfo.url
将具有加载图像的 URL(例如http://sometURL/image1.jpg)。