使用加载程序传递文件的信息

时间:2010-01-12 07:13:25

标签: actionscript-3 bytearray loader

我正在使用Loader从ByteArray中获取图像数据。问题是我需要在传递给完整处理程序后,使用名称(事先已知)存储该图像数据。由于操作是异步的,我无法确定多个图像将首先完成加载,因此我似乎需要以某种方式传递信息...我似乎无法找到任何传递任何属性的Loader随处可见的有用信息。

有关如何实现此目标的任何建议?

4 个答案:

答案 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)。