Flex 3 Tree 元件的資料更新Bug

Flex 3 的Tree元件可以使用filterFunction來做過濾的功能,比如介面上有一個文字框,輸入文字後比對Tree內容,不包含這段過濾文字者就不顯示。正確情況應該如下圖所示。


但是如果資料的筆數很多時,在Tree元件上使用filterFunction過濾資料時,Tree的內容會亂掉並跑出幾個奇怪的現象:
  1. 過濾以後的Tree高度,不會更新,所以ScrollBar一樣可以向下拉動很長的高度。如下圖示,ScrollBar還是很小,表示Tree內容很長。
  2. 過濾後,Tree內容仍然保持很長,那不應該存在的cell會怎樣呢?結果Tree裡面會自動找東西亂填cell,如下圖,過濾後應該有5個cell,但超過第3個cell的名稱就開始重複了。


即使使用了invalidateList、validateNow、Collection.refresh等方法也沒有用,標準解法目前未知,但可以用下列方式將顯示更正。在呼叫完filterFunction以後,加上下列方式:

tree.expandItem( [your tree data] ,false);
tree.expandItem( [your tree data] ,true);

語意上就是讓Tree展開和關閉一次,expandItem方法內部觸發了某個正確的resize和display方法,什麼方法?暫不研究。



留言

這個網誌中的熱門文章

3dmax的biped如何使用CMU的免費motion capture資源

如何把3dmax的physique轉成skin