理解GWT AbstractActivity的启动方法

时间:2013-12-06 14:44:12

标签: java gwt gwt-mvp gwt-places gwt-activities

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

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

@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附加的内容吗?换句话说,将视图设置为它的价值是什么?
  2. 为什么AbstractActivity#start(...)方法接受EventBus arg?从此方法内部发送/接收事件是否需要和/或典型?
  3. 提前致谢!

3 个答案:

答案 0 :(得分:1)

view.setPresenter(this)设置视图和演示者之间的双向通信。它的肉可用于点击处理程序等。

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

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

  3. 查看Activity and Places section of gwtproject.org

答案 1 :(得分:1)

活动是在给定时间内负责UI的给定部分上的交互的对象。它们由相对ActivityManager启动/停止以响应网址更改(即PlaceChangeEvent s)。

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

因此...

    显示
  1. containerWidget。它可以是RootLayoutPanel.get(),也可以是整个UI的特定面板(必须是AcceptsOneWidget个)。你附上你的观点。
  2. EventBus方法的start()是由ResettableEventBus保留的原始ActivityManager封套。这样,当活动停止时,连接到这种总线的任何处理程序将自动取消注册。您通常希望依赖此总线,而不是使用全局总线。

答案 2 :(得分:0)

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

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

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

activityplacediagram

activityplacediagram2

这些内容取自我博客中的文章,以便在需要时提供更多详细信息http://wpamm.blogspot.fr/