Java 了解GWT AbstractActivity';s启动方法

Java 了解GWT AbstractActivity';s启动方法,java,gwt,gwt-mvp,gwt-places,gwt-activities,Java,Gwt,Gwt Mvp,Gwt Places,Gwt Activities,我正在尝试学习GWT推荐的MVP和他们的Activities&Places API(是的,我知道它们是两个不同的东西,但它们似乎很好地相互配合) 在许多活动/场所的代码示例中,我一直在AbstractActivityimpls中看到以下类似代码: @Override public void start(AcceptsOneWidget containerWidget, EventBus eventBus) { view.setPresenter(this); containerW

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

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

@Override
public void start(AcceptsOneWidget containerWidget, EventBus eventBus) {
    view.setPresenter(this);
    containerWidget.setWidget(view.asWidget());
}
我相信第一行(
view.setPresenter(this);
)是在视图和演示者之间创建双向性。但是我不确定第二行(
containerWidget.setWidget(view.asWidget());
)完成了什么。因此,有两个问题:

  • 什么是
    集装箱Widget
    ?它来自哪里?它是附在
    根面板上的吗?换句话说,将我们的观点设定为它的价值是什么
  • 为什么
    AbstractActivity#start(…)
    方法接受
    EventBus
    arg?是否需要和/或典型地从该方法内部向总线发送/接收事件
  • 设置视图和演示者之间的双向通信。它的肉可以用来做点击处理器之类的东西

  • 对。根面板不太可能是主体元素。在
    onModuleLoad
    中创建应用程序布局。在那里,您将创建一个“AcceptsOneWidget”,例如一个SimplePanel,并将其传递给演示者。您要做的第一件事是创建自己的视图。此视图将替换此元素以前的内容

  • 事件总线用于所有活动之间的通信。假设您有一个两列的应用程序布局。在这种情况下,您将有一个活动的主活动和第二个详细活动


  • 看看

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

    ActivityManager
    负责UI的一个给定区域,即一个显示器(当然,如果您有多个管理器,则是整个UI,即
    主体)。此类管理器在内部持有对其拥有的
    AcceptsOneWidget
    的引用(从调用
    ActivityManager.setDisplay()
    方法传递的引用),以及
    EventBus
    对象(从
    ActivityManager
    实例化传递的对象)

    所以

  • containerWidget
    是显示。它可以是
    RootLayoutPanel.get()
    ,也可以是整个UI的特定面板(必须是
    AcceptsOneWidget
    面板)。您可以将视图附加到它
  • start()
    方法的
    EventBus
    ActivityManager
    持有的原始EventBus的
    ResettableEventBus
    包装器。这样,当活动停止时,连接到该总线的任何处理程序都将自动取消注册。您通常希望依赖此总线,而不是使用全局总线

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

    看看Thomas Broyer关于筑巢活动的文章

    我创建了一个github项目来实现他的想法(仍在进行中):

    如果需要的话,这些都是从我博客里的文章中获取的