2010-05-05 20 views
1

我已經發布我的問題作爲這個問題的答案:How to get associated URLRequest from Event.COMPLETE fired by URLLoaderFlash AS 3加載程序OnComplete內循環

對不起。這裏是我的問題再次:


嗨,我怎樣才能讓你的函數工作的循環加載器對象?謝謝! Meengla這是我現有的(粗略的)代碼;我總是從數組的最後一個元素獲取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 
+0

您的代碼是嘗試爲onComplete事件分配EventHandler 5次。你能詳細說明你想做什麼嗎?你的數組在這裏不被引用......只是執行5次的循環代碼。我認爲需要更多的代碼才能看到提出的建議。您也不會讓初始加載程序完成任何事情 - 通過一次又一次地調用同一個對象上的_loader.load(),您將有效地取消先前的加載請求。 – liquidleaf 2010-05-05 20:37:42

+0

您可能想要聲明var _loader = new Loader();在for循環中 - 這樣您將創建5個加載器對象,而不是嘗試爲所有5個對象使用一個。這裏似乎有些混淆關於事件監聽器的功能 - 再次,更多的細節會有所幫助。 – liquidleaf 2010-05-05 20:40:27

+0

謝謝! Iam試圖從遠程圖像分配動態的'Image()'對象字節數據。我還將「mylabel」的值賦予了標記字段的recAC數組。 我想基本上,如果你可以告訴我誰重新使用\t http://stackoverflow.com/questions/2338317/how-to-get-associated-urlrequest-from-event-complete-fired-by-urlloader ,以便它可以用於「加載器」對象,那麼這將是很大的幫助。具體來說,行: xmlURLLoader.addEventListener(Event.COMPLETE,function(req:URLRequest):Function { – meengla 2010-05-05 20:54:20

回答

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)]); 
} 

混亂的部分是找到一個好辦法來跟蹤它的負載與相關聯的標籤等,因爲在理論上您的負載可以以任意順序完成。這就是爲什麼我在那裏有一個單獨的標籤數組,然後你只需要用剛剛完成加載的加載器匹配所需的標籤。

我希望有幫助!

+0

嗨,我想我很接近!但根據Flex調試器: 標籤[裝載機。的indexOf(e.currentTarget)]); – meengla 2010-05-06 13:10:56

+0

嗯,它應該是...數組有indexOf()方法,它返回您傳入的項目的索引,如果它在數組中。不知道什麼會導致不工作?還有其他方法可以解決這個問題 - 例如,您可以使用字典實例。在你的循環中,dict [loaders [j]] = labels [j]然後在你的處理程序中就像:doneLoad(e.currentTarget,dict [e.currentTarget]) 解決方案有一百萬種方法,你很近。隨它玩吧。 :) – Myk 2010-05-06 14:03:16

+0

是的,'裝載機'陣列確實有一堆'裝載機'的對象,但匹配應該是確切的,如果indexOf() – meengla 2010-05-06 14:23:51

0

該行belove應該工作,但它總是返回-1。 loaders.indexOf(e.currentTarget);

這裏我的代碼

爲(ⅰ;我<總;我++){ imgLoaderArray [I] =新的Loader(); imgLoaderArray [i] .contentLoaderInfo.addEventListener(IOErrorEvent.IO_ERROR,urlError);
imgLoaderArray [i] .contentLoaderInfo.addEventListener(Event.COMPLETE,loaded); imgLoaderArray [i] .load(new URLRequest(xmlList [i] .image)); }

函數已加載(e:Event):void {「index:」+ imgLoaderArray.indexOf(e.currentTarget)); //每次返回-}