如何保持视图“谦虚” - 使用SuggestBox与特殊的Oracle和建议

时间:2011-04-19 12:01:47

标签: gwt mvp gwt-mvp

我学会了如何实现自己的SuggestionOracle(“AuSuggestOracle”)和拥有 建议( “AuMultiWordSuggestion”)。就我而言,建议对象 是用DTO构建的。在选择事件我需要这个dto(或 它的某些领域)做出适当的反应。 我实现了一个包含3个特殊框的建议框的小部件 oracle和它们之间的一些逻辑。现在我想应用MVP模式 - 在演示者和视图中拆分此小部件。 目前演示者显示的界面如下:

    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 个答案:

答案 0 :(得分:1)

我解决这个问题的方法是省略Oracle的getter,因为一旦我的演示者设置它,我的视图不需要任何关于它的信息。所以,我的界面看起来像这样:

public interface Display {
    ...

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

我遇到的问题是能够在实例化后将建议添加到SuggestBox。为了解决这个问题,我使用一个空白的SuggestBox初始化,然后将其从视图中删除,更新并将其重新插入到位。

之后,您可以编写处理程序(在演示者中)以检查建议是否是您的自定义建议的实例,并且您的演示者可以处理选择并将相关信息推送回您的视图。

通过这样做,你的所有观点都知道它将采取一些通用的建议,并在以后稍后将更新信息(这将是建议的结果,但视图是'谦虚'知道这一点。)