2010-02-07 97 views
3

我喜歡Flex 4中的皮膚 - 它們提供了邏輯和樣式之間非常好的分離。Flex 4皮膚&綁定

我想知道人們如何在皮膚中使用綁定。最簡單的方法是隻在皮膚綁定:

label="{ hostComponent.model.buttonLabel }" 

你也可以使用2個綁定:

selectedItem="@{ hostComponent.model.selectedItem }" 

,但你可能會說,這是邏輯,所以它應該在組件來處理。每次創建新外觀時,您都不想重新創建所有綁定。這看起來很脆弱,容易造成錯誤。

那麼有什麼選擇?創建事件監聽器的桶負載我想。我想,adobe觀察和觀察值標記也可能有用。

其他人如何處理?

+0

爲什麼你想要雙向綁定?我從皮膚更新組件屬性沒有意義。 – Yaba 2011-03-03 15:20:30

+0

那麼,例如,如果您有一個文本輸入框,並且您希望在文本更新時通知模型或組件。 – Roaders 2011-03-23 19:15:51

回答

1

我認爲這是一個很好的和有趣的問題。有幾種選擇。我想你可以將模型注入皮膚並直接綁定,但這似乎是錯誤的,因爲我認爲皮膚應該與組件密切相關 - 如果組件改變其對模型的引用,它會自動更改皮膚。無論如何,它只會誇大你提到的問題。

您可以在皮膚中創建id並從模型中對它們進行操作。例如

SKIN: label id="infoLabel" 
COMPONENT: [SkinPart] var infoLabel:Label 
creationComplete { 
    BindingUtils.bindProperty(this, 'infoLabel', model, 'infoLabel'); 
} 

這可以解決您的問題。在同一組件的皮膚之間不需要重複維護。但是使用BindingUtils需要付出代價。首先,並不明顯什麼是什麼 - 使用{}方式更加明顯。其次(我想這實際上只是第一點的一部分),你可能會混淆能力較差的開發人員,他們必須閱讀你的代碼並弄清楚發生了什麼。

編輯:這假定你的組件在AS3。如果你的組件在MXML中,我想你可以像平常一樣在MXML中進行綁定。

+0

感謝您的發帖。我個人討厭BindingUtils並從不使用它們。你基本上在你的代碼中添加了一系列魔術字符串(屬性名稱)。我的團隊中有一位開發人員花了一個下午來調試由此造成的問題。這個錯誤被綁定代碼所吞噬,所以很難追查到。 – Roaders 2011-06-29 08:10:10

+0

好的,但如果你用MXML而不是AS3編寫組件,我認爲你可以用綁定標籤做同樣的事情。 – Fletch 2011-07-05 10:26:37