我正在使用Loader将图像数据从ByteArray中取出。问题在于,一旦将图像数据传递给完整的处理程序,我需要使用名称(事先已知)来存储该图像数据。由于操作是异步的,我不能确定哪个多个图像会先完成加载,所以看起来我需要以某种方式传递信息......我似乎无法找到任何通过任何Loader的属性依稀有用的信息。使用加载程序为文件传递信息
有关我如何完成此任务的任何建议?
我正在使用Loader将图像数据从ByteArray中取出。问题在于,一旦将图像数据传递给完整的处理程序,我需要使用名称(事先已知)来存储该图像数据。由于操作是异步的,我不能确定哪个多个图像会先完成加载,所以看起来我需要以某种方式传递信息......我似乎无法找到任何通过任何Loader的属性依稀有用的信息。使用加载程序为文件传递信息
有关我如何完成此任务的任何建议?
难道你不能只使用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);
}
你能提供一些代码吗?
loader.contentLoaderInfo.url
将具有加载图像的URL(例如http://sometURL/image1.jpg)。
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);
}
这也应该工作。 – grey 2010-01-12 18:07:20
第一种解决方案是使用字典将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);
}
}
聪明的解决方案,谢谢。 – grey 2010-01-12 18:06:44
呀,这样做的工作。昨天我遇到了麻烦,所以谢谢你帮忙解决这个问题。现在将其标记为最佳解决方案,因为它需要最少的代码。谢谢。 – grey 2010-01-12 18:05:47