2010-04-13 190 views
0

我已經從一個MySQL數據庫返回多維數據陣列,當這種被收集的createNews函數創建用戶界面。我遇到的問題是循環迭代比創建UI更快,是否有一種方法使用事件監聽器的循環,所以它只在我的函數完成其工作後才繼續?AS3環路和事件偵聽器

var t:Array = responds.serverInfo.initialData; 
for (var i:uint = 0; i < t.length; i++) { 
    var date = t[i][1]; 
    var newstitle = t[i][2]; 
    var story= t[i][3]; 
    var image = t[i][4]; 

    createNews(date, newstitle, story, image);  
} 

回答

0

您可以從完成創建ui元素(然後處理數組中的下一項)完成自定義回調。

 
var t:Array = responds.serverInfo.initialData; 
var numProcessed:int = 0; 

private function processNext() : void { 
    if (numProcessed == t.length) return; 
    var date = t[numProcessed][1]; 
    var newstitle = t[numProcessed][2]; 
    var story= t[numProcessed][3]; 
    var image = t[numProcessed][4]; 

    numProcessed++; 

    createNews(date, newstitle, story, image); 
} 

取決於你createNews如何運作的工作,一切是如何構成的,您的通話processNext的過程時所做的用戶界面會有所不同。我在猜測createNews會創建一個新的類或者其他的東西,在這種情況下,你會附加一個事件監聽器給這個新類,監聽一個COMPLETE事件,這個事件在創建完成後會被調度,並且將processNext設置爲事件處理器。

+0

都似乎工作,我不知道閃光燈是單線程。雖然createnews()確實會調用另外3個函數,所以也許是這樣嗎? – Ross 2010-04-14 09:37:17

0

您的createNews函數不會阻止循環,直到它返回? Actionscript是單線程的,所以我不確定當createNews函數尚未完成時循環如何繼續。

+0

表示加載的組件轉換(補間),或使用loader或urlloader加載某些東西,或使用timerEvent或setTimeout。這些都是異步的 – jonathanasdf 2010-04-14 02:38:17