我使用装载机以获取图像数据输出的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);
}

首先解决方案将是使用一个词典对加载实例映射到名称。 像这样:

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

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top