我学会了如何实现自己的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。
答案 0 :(得分:1)
我解决这个问题的方法是省略Oracle的getter,因为一旦我的演示者设置它,我的视图不需要任何关于它的信息。所以,我的界面看起来像这样:
public interface Display {
...
void setSuggestionOracle(SuggestOracle oracle);
HasSelectionHandlers<SuggestOracle.Suggestion> getSelectionListener();
}
我遇到的问题是能够在实例化后将建议添加到SuggestBox。为了解决这个问题,我使用一个空白的SuggestBox初始化,然后将其从视图中删除,更新并将其重新插入到位。
之后,您可以编写处理程序(在演示者中)以检查建议是否是您的自定义建议的实例,并且您的演示者可以处理选择并将相关信息推送回您的视图。
通过这样做,你的所有观点都知道它将采取一些通用的建议,并在以后稍后将更新信息(这将是建议的结果,但视图是'谦虚'知道这一点。)