1

作为问题的后续,如何从由 URLLoader 触发的 Event.COMPLETE 获取关联的 URLRequest,如何使该函数在循环中为加载器对象工作?

这是我现有的(粗略)代码;我总是从数组的最后一个元素中获取 mylabel。

var _loader = new Loader(); 
for (j = 0; j < 5; j++) {
    //mylabel variable is correct setup in the loop
    _loader.contentLoaderInfo.addEventListener(Event.COMPLETE, function(e:Event):void {
        doneLoad(e, mylabel);
    });

    _loader.load(new URLRequest(encodeURI(recAC[j].url)));

}//for loop
4

2 回答 2

1

根据上面的评论,这不起作用,因为:

1)您只是向加载程序添加了 5 次相同的事件侦听器。2)您只是将相同的加载器对象重置了 5 次。

最终输出就像您上次调用它一样。

有多种方法可以解决这个问题 - 异步加载东西是学习编码的好方法之一 - 但最简单的方法可能只是创建五个单独的加载器。

我会做这样的事情:

var loaders:Array = [];
var labels:Array = ["label1", "label2", "label3", "label4", "label5"];
for (var j:int = 0; j < 5; j++) {
loaders[j] = new Loader();
loaders[j].contentLoaderInfo.addEventListener(Event.COMPLETE, completeHandler);
loaders[j].load(new URLRequest(encodeURI(recAC[j].url)));
}

function completeHandler(e:Event):void {
doneLoad(e.currentTarget, labels[loaders.indexOf(e.currentTarget)]);
}

令人困惑的部分是找到一种好方法来跟踪哪个负载与哪个标签等相关联,因为理论上您的负载可以按任何顺序完成。这就是为什么我在那里有一个单独的标签数组,然后你只需将所需的标签与刚刚完成加载的加载器匹配。

我希望这会有所帮助!

于 2010-05-05T21:09:30.803 回答
0

belove 行应该可以工作,但它总是返回-1。loaders.indexOf(e.currentTarget);

这是我的代码

for(i; i < total; i++){ imgLoaderArray[i] = new Loader(); imgLoaderArray[i].contentLoaderInfo.addEventListener(IOErrorEvent.IO_ERROR, urlError);
imgLoaderArray[i].contentLoaderInfo.addEventListener(Event.COMPLETE, 已加载); imgLoaderArray[i].load(new URLRequest(xmlList[i].image)); }

函数加载(e:Event):void{trace("index:"+imgLoaderArray.indexOf(e.currentTarget)); // 每次返回 -1 }

于 2011-01-26T09:14:17.097 回答