我正在使用Loader从ByteArray中获取图像数据。问题是我需要在传递给完整处理程序后,使用名称(事先已知)存储该图像数据。由于操作是异步的,我无法确定多个图像将首先完成加载,因此我似乎需要以某种方式传递信息...我似乎无法找到任何传递任何属性的Loader随处可见的有用信息。
有关如何实现此目标的任何建议?
答案 0 :(得分:1)
你能不能只使用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);
}
你能提供一些代码吗?
答案 1 :(得分:0)
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);
}
答案 2 :(得分:0)
第一种解决方案是使用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 );
}
}
答案 3 :(得分:-2)
loader.contentLoaderInfo.url
将包含已加载图片的网址(例如http://sometURL/image1.jpg)。