GWT MVP - 维护彼此分开的多个显示器

时间:2011-05-04 06:55:55

标签: gwt gwt-mvp

我有一个GWT应用程序,我正在使用GWT MVP和地方/活动。

我的应用程序布局类似于

MENU | CONTENT

菜单和内容显示将动态变化,其中一个与另一个分开。我的意思是,当内容显示更改时,我不想更新菜单显示,反之亦然。两个显示都需要能够响应PlaceChangeEvents并在发生这些事件时自行更新。问题是每个显示应该只响应某些PlaceChangeEvents而更新,忽略指向另一个显示的PlaceChangeEvents。然而,使用“标准”GWT MVP模式不起作用,因为即使每个显示器都有自己的ActivityManager,它们也会自动获取所有PlaceChangeEvents,因为有一个PlaceController监听单个EventBus。我能看到的唯一方法是使用两个EventBus和两个PlaceControllers - 一个用于菜单,一个用于内容。所以我的问题是这是一个很好的解决方案,还是有一个更简单/更好的方法,我错过了?此解决方案的一个问题是PlaceHistoryHandler只能在其中一个EventBus中注册。

1 个答案:

答案 0 :(得分:5)

地点更改实际上由ActivityMappers控制。他们获得一个Place并返回相应的Activity。您可以在此处控制“地方”如何映射到“活动”:

  1. 您需要创建两个ActivityMappers(MenuActivityMapper,ContentActivityMapper),然后使用它自己的ActivityMappers实例化两个ActivityManagers。然后,对于每个ActivityManager,您调用setDisplay(AcceptsOneWidget display),其中每个您在一个区域(显示)中传递它将显示其内容。

  2. 对于菜单,您可能只使用一个活动,因为它在所有地方都可用。因此MenuActivityMapper.getActivity()将始终返回MenuActivity的相同实例。为了使MenuActivity能够根据场所变化调整外观,MenuActivity应该收听PlaceChangeEvents。