7

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

我的应用程序布局类似于

菜单 | 内容

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

4

1 回答 1

5

位置变化实际上是由 ActivityMappers 控制的。他们得到一个 Place 并返回相应的 Activity。您可以在此处控制如何将地点映射到活动:

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

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

于 2011-05-04T12:41:39.570 回答