2012-09-07 31 views
1

我在Flex 4.6中使用MX Tree控件。它的數據提供者是一個嵌套的ArrayCollection。控件的工作方式是,當樹節點展開時,事件冒泡到另一個組件,該組件檢測事件並從服務器獲取數據並更新ArrayCollection(即單擊分支的ArrayCollection)。但是更新的數據不會顯示在樹中,除非我關閉特定的分支並再次展開它。flex 4樹控件不更新

E.g.

  • +文件夾1
  • +文件夾2
  • +文件夾3

最初文件夾1的兒童是一個空的ArrayCollection當用戶展開文件夾1的數據是從後端取出,並加入給子ArrayCollection。但是,這並不顯示文件夾1下的孩子。如果我關閉文件夾1並再次打開,它就會顯示出來。我想當數據被添加到ArrayCollection它應該更新顯示。有人可以讓我知道我可能做錯了什麼嗎?

回答

0

以我的經驗,下面一直在努力通知其名單需要重新繪製樹控制:

  • arrayCollection.refresh();
  • tree.invalidateList();
+0

但我認爲Tree類會監聽ArrayCollection類的更改事件,並且在發生更改而不顯式調用invalidateList()時重繪自身。這不就是我們爲什麼使用ArrayCollection類嗎? –

+1

我發現有時我需要在某些情況下在樹上調用invalidateList()。你說你的ArrayCollection是嵌套的?它是如何構造的,ArrayCollections的ArrayCollection?如果你替換嵌套的ArrayCollection而不是添加它,也許Tree會被正確地通知。 –

+0

ArrayCollection中的每個項目都有一個依次爲ArrayCollection的子對象。父ArrayCollection是我的模型的一部分,樹在UI組件中。控制器組件將UI綁定到模型中的ArrayCollection。當用戶打開樹節點時,我會在UI中檢測事件並將其發送給更新孩子的控制器組件。這應該會自動更新樹,因爲該樹應該正在監聽CollectionChange事件。這是不工作的部分。我會盡快添加代碼大綱,這可能會使它更加清晰。 –

0

我找到了解決問題的辦法。當任何子類ArrayCollection類更新時,我需要在主ArrayCollection類上調用itemupdated。這會正確更新視圖。因此,在上面的例子中,如果用戶點擊文件夾2,事件會傳播到一個模型,將數據添加到文件夾2的子數組集合中,一旦完成,我應該在我的主ArrayCollection上調用itemupdated,並將更新的項目作爲文件夾2 ,這正確地更新了樹視圖。