0

我正在尝试学习 GWT 推荐的 MVP 和他们的活动和地点 API(是的,我知道它们是两个不同的东西,但它们似乎很好地相互配合)。

在很多活动/地点的代码示例中,我一直在AbstractActivityimpls 中看到以下类似代码:

@Override
public void start(AcceptsOneWidget containerWidget, EventBus eventBus) {
    view.setPresenter(this);
    containerWidget.setWidget(view.asWidget());
}

相信第一行 ( view.setPresenter(this);) 是在 View 和 Presenter 之间创建双向性。但我不确定第二行 ( containerWidget.setWidget(view.asWidget());) 完成了什么。所以,2个问题:

  1. 是什么containerWidget?它从何而来?它是附加到的RootPanel吗?换句话说,将我们的 View 设置为它的价值是什么?
  2. 为什么该AbstractActivity#start(...)方法接受EventBusarg?从该方法内部向/从总线发送/接收事件是否需要和/或典型?
4

3 回答 3

1

view.setPresenter(this) 设置view和presenter之间的双向通信。它的肉用于点击处理程序和类似的东西。

  1. 是的。RootPanel 很可能是 body-element。在您的内部onModuleLoad创建您的应用程序布局。在那里,您将创建一个“AcceptsOneWidget”,例如一个 SimplePanel,并将其传递给您的演示者。您要做的第一件事是创建自己的视图。此视图将替换此元素以前的内容。

  2. EventBus 用于所有活动活动之间的通信。假设您有一个两列应用程序布局。在这种情况下,您将有一个活动的主活动和第二个细节活动

查看gwtproject.org 的活动和地点部分

于 2013-12-06T15:38:15.157 回答
1

活动是在给定时间内负责 UI 给定部分的交互的对象。它们由它们的相对ActivityManagers 响应 URL 更改(即PlaceChangeEvents)启动/停止。

AnActivityManager负责 UI 的给定区域,一个显示器(当然,如果您有多个管理器;在另一种情况下,整个 UI - the body-)。这样的管理器在内部持有AcceptsOneWidget他们拥有的对象(从方法调用传递ActivityManager.setDisplay()的对象)以及EventBus对象(从实例化传递的对象)的引用ActivityManager

所以...

  1. containerWidget是显示器。它可以是一个RootLayoutPanel.get(),或者是整个 UI 的一个特定面板(必须是AcceptsOneWidget一个)。你附上你的观点,给它。
  2. 方法的是 . 持有EventBus的原始start()方法的ResettableEventBus包装器ActivityManager。这样,当活动停止时,连接到此类总线的任何处理程序都将自动注销。您通常希望依赖此总线,而不是使用全局总线。
于 2013-12-06T15:47:27.323 回答
0

我认为以前的答案已经足够好了。以下模式可以帮助您更轻松地理解工作流程。

看看 Thomas Broyer 关于嵌套活动的文章http://blog.ltgt.net/gwt-21-activities-nesting-yagni/

我创建了一个 github 项目来实现他的想法(仍在进行中):https ://github.com/ronanquillevere/GWT-Multi-Activities

activityplacediagram

activityplacediagram2

Those are taken from articles inside my blog for more detail if needed http://wpamm.blogspot.fr/

于 2013-12-26T23:00:44.810 回答