GWT MVP 导航边栏

标签 gwt

我正在使用 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 2MVP with A&P只是实现相同目标的不同方法:表示和业务逻辑之间的分离,以及纯 junit 测试。只需选择您喜欢的。参见 this在群组上发帖以供引用。

希望这能让您入门。

关于GWT MVP 导航边栏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15635965/

相关文章:

java - 在 Eclipse 3.6 上安装 GWT 2.1 时出现问题

gwt - 拦截标签小部件上的点击

java - GWT maven 项目的客户端断点可以在 Eclipse 中工作,但不能在 Netbeans 中工作

java - GWT:为什么 Chrome 和 IE 不能下载文件,而 Firefox 可以?

java - 在 @PostConstruct 中调用 JSNI 方法 - Errai

java - 为非实体请求实现GWT RequestFactory服务

java - 如何在 North 小部件中创建 2 个内容面板

gwt - 下载 GWT 展示项目

在 Tomcat 中时,GWT 无法从文件系统加载图形

java - 当 session 超时重定向到 GWT 项目中的登录页面时