0

我学会了如何实现我自己的 SuggestionOracle(“AuSuggestOracle”)和自己的 Suggestions(“AuMultiWordSuggestion”)。在我的例子中,建议对象是用 DTO 构造的。在选择事件中,我需要这个 dto(或它的某些字段)做出适当的反应。我实现了一个小部件,其中包含 3 个建议框,带有这个特殊的预言和它们之间的一些逻辑。现在我想应用 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。

4

1 回答 1

1

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

public interface Display {
    ...

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

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

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

通过这样做,您所知道的所有观点就是它将为某事提供通用建议,并且在稍后的某个时间它将更新信息(这将是建议的结果,但观点是“谦虚”要知道)。

于 2011-12-08T21:23:37.700 回答