2009-01-12 25 views
6

含義。 。 。我已經看到了將組件綁定到[Bindable] dataProvider的情況。當我更新dataProvider中的數據時,組件不會立即反映更改。我需要做些什麼來刷新數據?什麼事件導致組件刷新其dataProvider數據?Flex [Bindable]標籤有什麼作用?

回答

11

這可能是矯枉過正的,但如果您真的對添加[Bindable]標籤時發生的問題感興趣,我強烈建議您查看Michael Labriola的潛水數據綁定沃特世會話360 | Flex !聖荷西。這是迄今爲止關於這個問題的最深入的介紹,你會發現。

要查看它,您需要下載Adobe Media Player(在Adobe Air上運行)。如果您在訂閱Adobe Media Player中的360 | Flex會話時遇到問題,請按照Ted Patrick的建議his blog post

他的演示文稿也在Slideshare上,但它的信息或娛樂性都很差。

+2

Adob​​e現在已經重新制作了他們的Adobe TV部分,因此如果您想避免在安裝Adobe Media Player時避免運行,請轉至Adobe TV部分中的此鏈接。更容易:) – merlinc 2009-09-10 10:55:28

2

這取決於你對數據做了什麼。 是否應用了過濾器,如果是,則需要刷新數據。你是否做過排序,如果是的話,你需要刷新數據。 是你的dataProvider是一個數組,如果是的話,這不會綁定,使用ArrayCollection。

給我們一個例子,說明它沒有更新,我們應該能夠給予特定的幫助。

1

如果您正在擺弄命令行編譯器,可以使用compile.keep-generated-actionscript標誌來查看將[Bindable]添加到屬性的效果。創建一個簡單的ActionScript類調用測試和單一綁定字符串屬性添加到它,然後編譯它是這樣的:

mxmlc -compiler.keep-generated-actionscript test.as

這將創建一個名爲「生成的」包含所有多餘的動作腳本文件夾,在這個大小寫可能是單個文件(可能是)「_test-binding-generated.as」。

您應該可以看到,添加可綁定標記只是創建一個包裝器,它實現IEventDispatcher並在調用setter時調度事件。這是你的組件將會聽的包裝。

如果您的組件沒有立即反映其顯示中的變化,這可能意味着您必須查看該組件的重繪代碼。 Tree控件對於這類問題相當臭名昭着,主要是因爲更新可能很昂貴。

1

「當屬性是數據綁定表達式的來源時,當源屬性更改時,Flex會自動將源屬性的值複製到任何目標屬性。要向Flex發送信號以執行復制,必須使用[可綁定]元數據標記以向Flex註冊屬性,並且源屬性必須分派事件。「

+0

來源?請發佈一個網址! – nalply 2011-10-08 21:39:42

3

開發人員指南的第7章與此完全相符。我建議你閱讀它。

摘錄:

雖然原始數據對象,如 字符串數組或對象,是 包裹在集合時使用 它們作爲數據提供程序 屬性的值,使用集合明確 是一個更好的做法。使用 集合可明確確保數據同步並提供 更簡單和更復雜的數據 訪問和操作工具比 對象可直接用作原始 對象作爲數據提供者。 集合還可以提供一個用於訪問的一致性接口和用於管理不同類型數據的一致性接口 。

參見this有關數據綁定和數組