2011-04-11 39 views
1

我正在重構由另一個開發人員編寫的一些Flex代碼,並且正在實施PresentationModel方法,因爲我喜歡將ActionScript從MXML中分離出來。我發現的其中一個問題是原始的ActionScript代碼添加/刪除MXML中的元素。使用演示模型在Flex中添加元素

處理函數檢查模型並且值是否正確將會從視圖創建或移除元素。將演示文稿模型添加到視圖的廣告元素並保持我期望的鬆散耦合的最佳方式是什麼?

我正在考慮使用演示模型分派的簡單事件,並且視圖可以列出傳遞要添加的元素的詳細信息。還有其他解決方案嗎?

感謝

斯蒂芬

回答

1

如果您使用的演示模型,我會假設你有某種需要採取什麼數據。當任何類型的項目被動態地添加/刪除時,我確保將其數據驅動以便於操作。如果你想添加另一個項目,添加另一個數據模型到你選擇的dataProvider(List,ComboBox,DataGroup等)。

通過這種方法,您可以將演示者的邏輯抽象爲視圖。事件只能作爲您的觀點來了解您的演示者什麼時候完成某件事的方式。數據可以通過這種方式接收(並且這是一個很好的做法),或者您可以將演示者中的數據綁定到dataProvider。兩者都很好,我只是發現綁定更清潔,更簡單。

+0

好原代碼,請記住我重構這裏現有的代碼,有一個setter函數來設置一個值,然後調用()稱爲drawBorder另一個功能。這個drawBorder函數創建一個邊界形狀,並使用addElement()添加它。 – StephenAdams 2011-04-11 16:21:22

+0

是的,我知道你在重構。如果你要重構使用Presenter模式,你將不得不做一些改變。這只是編碼工作的方式。 – 2011-04-11 16:37:38

0

應該在視圖中包含執行一些圖形內容(繪製邊框,設置樣式,拖動管理,動畫......)的代碼的每個部分,而不是演示模型。

對於這種圖形,應該在PM中更改屬性後執行這些圖形,我們使用Cairngorm 3 Observer庫。基本上,它會監聽演示模型中的一些更改,並允許您在View中執行一個功能。

<cg:ObserveValue 
    source="{ model.firstName }" value="{ Name.SARA }" 
    handler="runEffectFunction"/> 

the documentation

+0

我已經看過觀察者庫,但我一直在想,數據綁定我的解決方案。我要在PresentationModel中設置一個顯示/隱藏標誌。然後將其綁定到我嘗試添加的元素的可見屬性。通過這種方式,我可以更改顯示/隱藏標誌並打開/關閉元素,而不是嘗試添加元素,而我無法按照當前頁面寫入的方式進行操作。 – StephenAdams 2011-04-15 09:24:16