dze*_*zzz 15
我建议在导航器中使用一个UI,因为在我看来,这足以完成这项工作.许多UI的主要不便之处是在它们之间切换时重新加载.您还需要记住所需的一致性,例如.在每个UI中具有相同的标头.根据我的经验,你肯定会遇到更多的问题;-)
要使其清洁,你应该使用MVP模式.我使用与com.google.common.eventbus.EventBus类似的方法来处理事件.我将eventBus添加到我的视图中,在那里发布事件并在适当的演示者中处理它们,而不在视图中实现监听器,在我看来这更有问题.由于MVP已经保留了"演示者"和"观看",我将Vaadin视为"页面".
您可以创建页眉,页脚主菜单,然后创建内容容器(例如,一些布局)到导航器:
Navigator n = new Navigator(UI.getCurrent(), layout);
Run Code Online (Sandbox Code Playgroud)
为了管理导航,我创建了PagesEnum,在更改视图时,我发布了ChangePageEvent,它将PageEnum.SOME_PAGE作为参数.可选地,还有要显示的项目的id.所以在MainPresenter我有:
@Subscribe
public void changePage(ChangePageEvent event) {
String url = event.getPageName();
if (event.hasId()) {
url += "/" + event.getEntityId();
}
navigator.navigateTo(url);
}
Run Code Online (Sandbox Code Playgroud)
然后有不同的可能性:
在输入页面的方法(Vaadin视图)中,确保显示适当的子菜单.
将它作为参数添加到ChangePageEvent并在changePage方法中处理它.
在PageEnum中将其硬编码为新字段,例如.subMenu并为子菜单创建其他枚举,在changePage方法中对其进行处理.
子菜单可能位于您导航器所连接的容器之外,因此您可以创建SubMenuPresenter和SubMenuView来处理子菜单更改.
Jak*_*ako 14
你问题的主题让我在2013年过得很热.我研究,分析和测试了Vaadin 7 UI和Navigator的各个方面.
我看了很多关于这个主题的框架,维基和论文; 与Vaadin 7相关且无关.
就在不久前(2013年初),我对这个问题并不新鲜; 无论如何,这些是我能够复活的一些链接:
我们的要求与Vaadin MVP Lite的情况有些相似; 但我们需要对视图的构成有更多的抽象和灵活性.我努力使用提供的导航器,但它不容易定制.
Navigator是一个具体的类.UI只能有一个导航器.在Navigator构造函数中,您可以找到以下行:
this.ui.setNavigator(this);
Run Code Online (Sandbox Code Playgroud)
Navigator在大多数应用程序中都能很好地满足简单需求,并提供开箱即用的优秀功能,但它并不适用于扩展或自定义.要记住的另一个方面是,当使用Navigator更改视图时,您可以更改屏幕上的所有组件; 你不能改变一点点.
然后我发现这个指南让我走上了一条有趣的道路: 编写用户界面,第7章 - MSDN Microsoft
这篇文章真的很棒,很有启发性; 虽然它与Delphi或任何其他基于组件的框架的工作方式有许多共同点,但"区域"概念确实是一种祝福.其他章节也非常有趣(模块化应用程序开发和MVVP).
最后,我们采用了只有一个UI的Region概念.简而言之,它的工作原理如下:
当UI被引入时发生的是一个区域被注册(整个UI)作为"根"区域.然后,表示登录表单的组件托管在"根"区域中.如果成功登录尝试,则在"根"区域中托管另一个组件(删除登录组件); 这个组件也是一个主机:它注册另一个名为"main"的区域,并且还有一个左侧导航菜单.现在,如果想要显示组件(例如,欢迎页面),则可以检索"主"区域并将组件显示出来.
Vaadin Navigator实现书签和后退按钮支持.我很伤心,因为我们没有开发它,但它不是我们的应用程序的要求.恕我直言,Vaadin家伙做了一个艰难但很好的决定,保持Navigator简单; 国家管理不容易实施.未来让Navigator更具扩展性将是一件好事.无论如何,我认为当前的Navigator可以满足大多数平均需求.
我的回答比预见的要长; 我希望我的努力可以提供帮助.
| 归档时间: |
|
| 查看次数: |
20390 次 |
| 最近记录: |