GWT中的MVP。复杂的观点

时间:2011-10-28 07:39:16

标签: java gwt mvp

有关于在复杂视图上使用mvp的问题。 假设,我们有一些带有样板设计的小部件(ListWidget),如下所示:

控制按钮提供在ContentPanel(只是常规CellTable与数据)和DetailsPanel之间切换的功能(这里我们可以编辑特定条目,这不是模态对话框)

DetailsPanel反过来具有这种结构

Button1,Button2,Button3应该只处理DetailsPanel并更改ActionPanel(ActionPanel某种向导,所以在Button1,Button2或Button3点击后它的内容应该全部改变),但按钮保存和取消应该导航我们回到ListWidget

  1. 我应该使用什么方法来实现所描述的功能?
  2. 我是否应该在主背景中使用2个不同的ActivityManagers?
  3. 如何在ListWidget上管理和向依赖面板广播消息? (可以将处理程序放在视图中,只是在某些操作中将事件推送到内部eventBus中吗? 例如,当我在DetailsPanel中保存项目时,PreviewPanel应该更改,并且此项目应该集中在CellTable中;等)
  4. 如果我应该使用带有两个不同ActivityManagers的模式,我应该如何处理活动更改行为?
  5. 谢谢,希望有人帮助我。

1 个答案:

答案 0 :(得分:1)

我正在回答你的问题,首先是简短的解释,然后逐点回答你的问题。

在框架级别,你可以有一个实现ValueChangeHandler的类,并使用History.addValueChangeHandler(controller);在历史记录中设置它,假设控制器正在实现值更改处理程序

使用History.newItem("NameOfAction")放入历史记录的任何newItem都会调用ValueChangeHandler的实现,在这种情况下controller 现在在ValueChangeHandler的实施中你可以

String token = event.getValue();
if (token.equals("NameOfAction")) {
    Call Appropriate presenter
}

现在让我们谈谈框架,演示者和视图实现的第二部分。我假设RootPanel是所有UI小部件的容器。您可以为每个操作创建单独的演示者

presenter = new ActionPresenter(rpc, eventbus, new ActionView())

请注意,我正在创建一个视图并传递给演示者,演示者获取数据并使用数据构建视图。您可以稍后将容器传递给演示者,以在UI上显示整个内容。

现在谈谈您的具体问题

  1. MVP将是你最好的选择MVP here上的文章非常好
  2. 只要这些小部件的容器相同,我就没有理由使用2个活动管理器
  3. EventBus将是理想的。如果必须使用事件传递数据,那么会话变量(如主类中的静态字段)将为您的目的服务
  4. 我需要更多有关您想要在哪个经理中添加的详细信息
  5. 希望这有帮助!