2010-05-14 26 views
1

我有一個mx:TileList綁定到一個ArrayCollection。我有一些代碼在修改ArracyCollection之前顯示「正在加載...」消息,之後隱藏加載消息。Flex:呈現綁定的TileList - 它何時完成呈現?

對於小數據集,它工作正常。不過,我注意到數組大小約爲50或更大,在TileList完成呈現新數據之前,flex會隱藏我的加載消息,並且我留下一個空白屏幕以保留奇數秒。

在TileList完成重新渲染後,是否有可以偵聽的事件?代碼看起來是這樣的:

loading_message.visible = true; 
for each (var x:Object in new_data) { 
    tile_list_data.append(x); // bound to my_tile_list component 
} 
my_tile_list.validateNow(); 
loading_message.visible = false; 

在這個例子中,loading_message出現,消失,然後Flex應用程序將最終揭示了更新的TileList之前落後。

任何想法?謝謝!

回答

0

問題是,它沒有執行.visible = true,爲每個循環運行並等待完成,然後進入.visible = false,但實際運行.visible,for每個.visible。

如果你想確保你的代碼在下一個代碼行繼續之前結束,你需要將其餘的代碼移動到另一個函數中,這個函數將會被你要做的一些custom event調用。

現在,在你的每一個你需要添加一個代碼來檢查它是否完成,然後調用你的自定義事件調度器。

var n:Number = 0; 
for each (var x:Object in new_data) { 
    ++n; 
    tile_list_data.append(x); // bound to my_tile_list component 
    if (new_data.length <= n) { call the event } 
} 

所以,現在你有你的每一個與一些自定義事件調度,將調用包含您的代碼的其餘部分其他功能,包括.visable =假,確保你的代碼的其餘部分只會在每一端結束後運行。

我知道這很醜,但這是我能想到的唯一方法,以確保它可以工作。