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

Jos*_*osh 7 gwt gwt-mvp

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

我的应用程序布局是这样的

菜单| 内容

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

Pet*_*ego 5

场所更改实际上由ActivityMappers控制.他们获得一个Place并返回相应的Activity.您可以在此处控制Places映射到Activities的方式:

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

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

  • 不对.如果你总是返回相同的MenuActivity实例(MenuActivityMapper中的单个字段),那么ActivityManager就不会在其上调用`start()`:http://www.google.com/codesearch/p?hl = en #A1edwVHBClQ/user /src/com/google/gwt/activity/shared/ActivityManager.java&q=com.google.gwt.activity.shared.activitymanager&d=0&l=111 (2认同)