我正在尝试学习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个问题:
containerWidget
?它从何而来?它是RootPanel
附加的内容吗?换句话说,将视图设置为它的价值是什么?AbstractActivity#start(...)
方法接受EventBus
arg?从此方法内部发送/接收事件是否需要和/或典型?提前致谢!
答案 0 :(得分:1)
view.setPresenter(this)设置视图和演示者之间的双向通信。它的肉可用于点击处理程序等。
是肯定的。 RootPanel很可能是身体元素。在onModuleLoad
内,您可以创建应用程序布局。在那里,您将创建一个“AcceptsOneWidget”,例如一个SimplePanel,并将其传递给您的演示者。你要做的第一件事是创建自己的视图。此视图将替换此元素的前一内容。
EventBus用于所有活动活动之间的通信。假设您有两列应用程序布局。在这种情况下,您将拥有一个活动的主活动和第二个细节活动
答案 1 :(得分:1)
活动是在给定时间内负责UI的给定部分上的交互的对象。它们由相对ActivityManager
启动/停止以响应网址更改(即PlaceChangeEvent
s)。
ActivityManager
负责UI的给定区域,显示(当然,如果您有多个经理;整个用户界面 - body
- 在另一种情况下)。这些管理员在内部持有对他们拥有的AcceptsOneWidget
(您通过调用ActivityManager.setDisplay()
方法传递的那个)的引用,以及EventBus
对象(你从ActivityManager
实例化中传递的那个。)
因此...
containerWidget
。它可以是RootLayoutPanel.get()
,也可以是整个UI的特定面板(必须是AcceptsOneWidget
个)。你附上你的观点。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
这些内容取自我博客中的文章,以便在需要时提供更多详细信息http://wpamm.blogspot.fr/