这里的菜鸟。
我刚开始使用Ray Ryan的Google IO谈话,并关注Google Developers网站上的一些文章。我没有使用任何GWT附加组件,如GWTP或MVP4G或GIN或任何其他东西。刚刚关注GWT网站上的联系人示例,并尝试对我的案例进行建模。
我有一个 DockLayout 面板,它有一个标题,左边是导航树,还有一个中央主面板。所有这些都在一个 DefaultView 中实现 DefaultPresenter 。
现在我有了一个 DialogBox ,当用户在树中执行某些操作时会弹出 DialogBox ,它分别在 DialogView 和 DialogPresenter 中建模。
现在,当我隐藏 DialogBox 时,我最终会从 AppController 调用 DefaultPresenter 的新实例,这样做会创建一个< strong> new DefaultView ,主中央面板中的所有树选择和其他更改都消失了。
或者我的整个MVP架构有问题吗?我现在计划为每个组件设置不同的演示者和视图说 HeaderPresenter / HeaderView,TreePresenter / TreeView,MainContentPresenter / MainContentView ?这样我只会创建我需要的演示者的新实例(如 MainContentPresenter )并保持现有的(如 TreePresenter和HeaderPresenter )这是否解决了我的问题?如何在浏览器窗口中拼接所有这些不同的视图? 我没有使用UiBInder ,只是坚持基础。
帮助我所有的专家,我陷入僵局!
答案 0 :(得分:2)
当我阅读你的问题时,感觉答案应该是一篇文章,类似于 GWT Apps的状态演示者架构。这是StackOverflow,但这完全是为了简洁,所以让我们看看:
1.
是否可以重新使用演示者的实例,而无需在历史记录更改中创建新的演示者?
当然。没有什么能阻止您在注入视图的一堆单例演示者之间切换(切换将在ActivityMapper的实现中发生)。 注意以后假设您的演示者是Activities。
2.
MVP模式中有没有办法在持久化值的演示者之间传递控件?
由于您的演示者现在是单身人士,他们将保留其成员变量的状态。对于演示者之间的消息交换,事件和EventBus是您的朋友。
3.
如何在事件触发时在app控制器中加载演示者的现有实例?
您的ActivityMapper
个实例,一旦在ActivityManager注册,就足够了。 ActivityManager
将依赖于public Activity getActivity(Place place)
ActivityMapper
接口的{{1}}实现,以返回您的一个单身演示者。
David Chandler's Google I/O 2011 GWT session触及了这种类型的主/细节架构。我强烈推荐这个问题,特别是第18分钟之后,大卫开始全面了解活动和地点的部分。