我正在使用 GWT 编写 Web 应用程序,并遵循 MVP tutorial在 GWT 网站上(即使用 History
进行导航)。
我对使用侧边栏进行导航的最佳方式感到有点困惑(即单击导航链接会更改主窗口中的内容。见下文)
--------------------
| | |
| nav | main |
| | window |
| | |
| | |
--------------------
我看到的一种可能的方法是声明两个 <div>
HTML 中用于导航和内容的标记。例如:
@Override
public void onValueChange(ValueChangeEvent<String> event) {
...
if (token.equals("navigation")) {
presenter = new NavigationPresenter(rpcService, eventBus, new NavigationView());
presenter.go(RootPanel.get("navigation"));
}
...
if (token.equals("content")) {
presenter = new ContentPresenter(rpcService, eventBus, new ContentView());
presenter.go(RootPanel.get("content"));
}
...
}
我不确定这是否是解决此问题的最佳方式。 (我想导航面板和内容窗口之间的双向通信可以通过 EventBus
完成?这种方法在更改 UI 时是否灵活(例如,对于移动站点))
我想知道人们会建议什么是解决此问题的最佳方法。我已经阅读并经常讨论关于 Activities and Places 的内容。 ,但据我所知,这些与 MVP 架构有些不同(事件和地点对 browser history management 很有用,尽管我认为我对 History
的使用涵盖了 (?))
如有任何建议,我们将不胜感激。
最佳答案
是的,您是对的:Activies 和 Places
是关于历史和导航管理的,是 GWT
中的一个框架。 MVP
只是一种架构设计模式。您可以使用您链接的文章中所示的框架实现 MVP
。
在您的示例中,您可以按您说的去做,但我会让每个 View 成为一个(惰性)单例,以避免任何潜在的昂贵的重新创建。我个人不喜欢这种方式,您最终会根据(这么多)HasXxx
接口(interface)定义您的Display
。
我认为,如果历史记录管理很重要,那么选择 Activities and Places
几乎是轻而易举的事(至少对我而言,至少是为了定义应用程序的骨架)。 Here您可以找到一篇非常好的文章来帮助您入门。你会看到你的用例有多普遍:你必须定义显示的区域(你的导航和主要区域)将对位置变化使用react(感谢事件管理器)并创建/重新启动将依次更新 UI 的事件.通过这种方式,您可以实现某种应用范围内的 MVP
,其中演示者就是事件。
就 MVP
而言,没有最佳方法:part 1 , part 2和 MVP with A&P只是实现相同目标的不同方法:表示和业务逻辑之间的分离,以及纯 junit 测试。只需选择您喜欢的。参见 this在群组上发帖以供引用。
希望这能让您入门。
关于GWT MVP 导航边栏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15635965/