我有一个 GWT 应用程序,并且正在将 GWT MVP 与地点/活动一起使用。
我的应用程序布局是这样的
菜单|内容
菜单和内容显示将动态变化,并且其中一个变化独立于另一个。我的意思是,当内容显示发生变化时,我不想更新菜单显示,反之亦然。两个显示器都需要能够响应 PlaceChangeEvents 并在发生这些事件时进行自我更新。问题是每个显示器应该仅响应某些 PlaceChangeEvents 进行更新,而忽略针对另一个显示器的 PlaceChangeEvents。然而,这在使用“标准”GWT MVP 模式时不起作用,因为即使每个显示器都有自己的 ActivityManager,它们也会自动拾取所有 PlaceChangeEvents,因为有一个 PlaceController 正在侦听单个 EventBus。我能想到的唯一方法是使用两个 EventBus 和两个 PlaceController - 一个用于菜单,一个用于内容。所以我的问题是,这是否是一个好的解决方案,或者是否有我缺少的更简单/更好的方法?此解决方案的一个问题是 PlaceHistoryHandler 只能注册到 EventBus 之一。
地点的改变实际上是由ActivityMappers控制的。他们获取一个 Place 并返回相应的 Activity。您可以在此处控制地点如何映射到活动:
您需要创建两个 ActivityMapper(MenuActivityMapper、ContentActivityMapper),然后实例化两个 ActivityManager,每个 ActivityManager 都有自己的 ActivityMappers。然后对于您调用的每个 ActivityManagersetDisplay(AcceptsOneWidget display)
对于每个您传递的区域(显示),它将显示其内容。
对于菜单,您可能只会使用一项活动,因为它在所有地方都可用。所以MenuActivityMapper.getActivity()
将始终返回相同的 MenuActivity 实例。为了使 MenuActivity 仍然能够根据位置更改调整其外观,MenuActivity 应该侦听 PlaceChangeEvents。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)