这里是新人。
我刚刚从 Ray Ryan 的 Google IO 演讲开始,并关注了 Google 开发者网站上的一些文章。我没有使用任何 GWT 附加组件,如 GWTP、MVP4G、GIN 或任何其他东西。只是按照 GWT 网站上的联系人示例并尝试对我的案例进行建模。
我有一个 DockLayout 面板,它有一个标题、左侧的导航树和一个中央主面板。所有这些我都在一个实现 DefaultPresenter 的 DefaultView 中。
现在我有一个DialogBox,当用户在树中执行某些操作时会弹出,这分别在DialogView和DialogPresenter中建模。
现在,当我隐藏 DialogBox 时,我最终会从 AppController 调用 DefaultPresenter 的新实例,它会创建一个 < strong>新的 DefaultView 以及我所有的树选择和主中央面板中的其他更改都消失了。
- 是否可以重复使用演示者的实例,而无需在历史记录更改时创建新的实例? (例如,在我的例子中,DefaultPresenter)
- 在 MVP 模式中是否有一种方法可以在演示者之间传递控制并保持值持久?
- 如何在事件触发时加载应用 Controller 内演示者的现有实例?
或者我把整个 MVP 架构搞错了?我现在计划为每个组件设置不同的演示者和 View ,比如 HeaderPresenter/HeaderView、TreePresenter/TreeView、MainContentPresenter/MainContentView ?这样我只会创建我需要的演示者的新实例(例如MainContentPresenter )并保留现有的(例如 TreePresenter 和 HeaderPresenter),这可以解决我的问题吗?我如何在浏览器窗口中拼接所有这些不同的 View ? 我没有使用 UiBInder,只是坚持基础知识。
请各位专家帮帮我,我陷入了僵局!
最佳答案
当我读到你的问题时,感觉答案应该是一篇文章,类似于GWT 应用程序的状态演示者架构。然而,这是 StackOverflow,一切都是为了简洁,所以让我们看看:
答案
1.
Is it possible to re use instances of presenters without creating a new one on history change?
当然。没有什么可以阻止您在注入(inject) View 的一堆单例演示者之间进行切换(切换将在 ActivityMapper 的实现中发生)。 注意此后假设您的演示者是 Activities .
2.
Is there a way in MVP pattern to pass controls between presenters with values persisting ?
由于您的演示者现在是单例,因此它们将保留其成员变量的状态。用于演示者、 Activity 和 EventBus 之间的消息交换是你的 friend 。
3.
How to load a existing instance of a presenter inside app controller on an event fire ?
您的 ActivityMapper
实例,一旦注册到您的ActivityManager ,应该足够了。 ActivityManager
将依赖于您对 ActivityMapper
接口(interface)的 public Activity getActivity(Place place)
的实现来返回您的单例演示者之一。
资源
David Chandler's Google I/O 2011 GWT session正是涉及这种类型的主/细节架构。总的来说,我强烈推荐它,对于这个问题,特别是第 18 分钟之后的部分,当时 David 开始全面概述 Activity 和地点。
关于java - GWT 模型 View 演示器,重用演示器?或演示者 - 演示者沟通,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11356540/