2012-06-25 64 views
3

GWT的編輯器框架非常方便,它不僅可用於編輯POJO,而且還可用於只讀顯示。GWT只讀和編輯模式的編輯器

但是我不完全確定內聯編輯的最佳做法是什麼。

我們假設我有一個PersonProxy,並且我有一個Presenter-View對用於顯示和編輯PersonProxy。此Presenter-View應該默認以只讀模式顯示PersonProxy,並且如果用戶按下編輯按鈕,它應該允許用戶編輯PersonProxy對象。

我想出瞭解決的辦法是創建兩個編輯器(PersonEditEditorPersonDisplayEditor),無論通過UiBinder加入ViewPersonEditEditor包含 ValueBoxEditorDecorator s和PersonDisplayEditor包含正常Labels
最初我顯示PersonDisplayEditor並隱藏PersonEditEditor

View中,我爲每個編輯器創建了兩個RequestFactoryEditorDriver,並通過View接口使其可從Presenter訪問。我還在View界面中定義了一個setState()方法。

當第一次顯示Presenter時,我會撥打PersonDisplayDriver.display()setState(DISPLAYING)

當用戶點擊編輯按鈕,我叫PersonEditDriver.edit()setState(EDITING)從我Presenter
setState(EDITING)將隱藏PersonDisplayEditor並使PersonEditEditor可見。

我不確定這是否是最好的方法。如果不是推薦的內嵌編輯方法是什麼?對編輯進行單元測試的最佳方式是什麼?

+0

如果我不理解問題錯誤,那麼你想編輯/查看PersonProxy對象的功能。爲什麼要爲一個對象創建兩個Presenter-View?如果假設GUI除了小部件可見性以外還有相同的編輯/查看,那麼你可以通過make方法實現,它將設置控制屬性,如control.setEnabled(false);僅供查看(顯示)。 – iMBMT

+0

我有兩個單獨的編輯器用於編輯/查看。一種是使用標籤和其他文本框。 我想避免使用兩個Presenter-View對,因爲代碼大部分是冗餘的或者是多餘的(用於顯示它只是在只讀驅動程序上調用display()並且爲了編輯而調用edit())。 Presenter-View par更像是一個工作流程的東西。 –

+0

@Ümit我採用完全相同的方法... – koma

回答

2

如果你負擔得起開發2個不同的意見,那麼去吧,它給你最大的靈活性。

我們在我們的應用程序中做了什麼,我們無法負擔開發和維護兩種視圖的成本,因此我們將這兩個州燒成了編輯,例如,一個可以是標籤或文本框的自定義組件(在大多數情況下,我們只需將文本框設置爲只讀並應用一些樣式來隱藏框邊框)。
要檢測我們所在的模式,因爲我們使用RequestFactoryEditorDriver(與您一樣),我們的編輯實現HasRequestContext:在此處接收到null值意味着使用了驅動程序的display()方法,因此我們處於只讀模式。另一種方法是使用EditorVisitor以及一些HasReadOnly接口(BTW正是RequestFactoryEditorDriver所做的將RequestContext下移到HasRequestContext編輯器)。

+1

如何處理只有只讀和可編輯字段混合的頁面?即。你如何做一些編輯()一些部分和一個顯示器()爲其他?謝謝! – Damo

+0

我們有2個驅動程序,我們'編輯()'與一個''display()'與另一個。顯然,屏幕必須分成2個編輯器,每個編輯器都由驅動程序控制。 –

+0

好的謝謝。不確定這種方法適用於我。我有一個編輯層,根據數據,一些子編輯應該是隻讀的。直到我完成編輯/顯示並檢查了setValue() – Damo

2

是的,Presenter-View對應該是。但在這裏,如果你喜歡去用兩種方式來實現此功能:

1)整合編輯/查看代碼設計在一個ui.xml ieEdit代碼EDitHorizo​​natlPanel和視圖代碼ViewHorizo​​ntalPanel .The面板有不同的ID。通過使用id,用顯示方法顯示/隱藏面板。如果getView().setState() ==Displaying則顯示ViewHorizo​​ntalPanel並且如果getView().setState()==Editing則顯示EditHorizo​​ntalPanel

2)不使用標籤,只使用文本框。設置啓用屬性是虛假的,當你需要它在視圖模式,否則爲真

你已經創建了兩個演示者/視圖,但我認爲如果編輯/視圖功能有類似的代碼,所以不需要重複類似的代碼一遍又一遍地查看目的。

如果一個大項目有這麼多的編輯/視圖功能,並且您將創建這種類型的多視圖/演示程序,而不是您的項目大小變得如此巨大的不必要。

我認爲無論我有什麼建議可能不是好的方法,但一種方法應該找出哪些有助於避免代碼複製。