2011-04-19 46 views
0

我學會了如何實現我自己的SuggestionOracle(「AuSuggestOracle」)並擁有 建議(「AuMultiWordSuggestion」)。在我的情況下,建議對象 由DTO構建。在選擇活動中,我需要此dto(或其中的某些字段)來適當地進行反應。 我實現了一個包含3個建議框的小部件,這個特殊的 oracle以及它們之間的一些邏輯。現在我想應用MVP模式 - 將這個小部件分割爲演示者和視圖。 目前主持人顯示界面看起來像:如何保持視圖「謙虛」 - 使用SuggestBox特殊的Oracle和建議

public interface Display { 
      HasSelectionHandlers<Suggestion> getFedLand(); 
      HasSelectionHandlers<Suggestion> getCounty(); 
      HasSelectionHandlers<Suggestion> getCommunity(); 
      AuSuggestOracle getFedLandOracle(); 
      AuSuggestOracle getCountyOracle(); 
      AuSuggestOracle getCommunityOracle(); 
      void clearCounty(); 
      void clearCommunity(); 
      void activateForm(); 
      Widget asWidget(); 
    } 

問題是有關我在「回AuSuggestOracle」方法 模型中的隱性知識。所以我的問題是如何讓界面變得「謙遜」。在我的情況下,顯示的建議字符串是 含糊不清,我至少需要選擇項目的「ID」才能知道選擇了哪個 DTObject。

回答

1

我解決這個問題的方法是,將Oracle的getters忽略掉,因爲一旦我的演示者設置了它,我的視圖就不需要任何關於它的信息。所以,我的界面是這樣的:

public interface Display { 
    ... 

    void setSuggestionOracle(SuggestOracle oracle); 
    HasSelectionHandlers<SuggestOracle.Suggestion> getSelectionListener(); 
} 

我遇到的是能夠建議添加到SuggestBox它被實例化後的問題。爲了解決這個問題,我初始化了一個空白的SuggestBox,然後從視圖中刪除它,更新並插入到位。

之後,您可以編寫您的處理程序(在演示者中)以檢查建議是否是您的自定義建議的實例,並且演示者可以處理選擇並將相關信息推回到您的視圖。

通過這樣做,您的所有視圖都知道它將爲某些事物提供一般性建議,並且在稍後的某個時間將會更新信息(這將作爲建議的結果,但視圖是以'謙'知道)。