Vaadin Grid vs Table总结详由数据容器提供支持

2022-09-02 12:01:39

Vaadin 7 中的网格组件有什么区别?

我应该使用哪个,什么时候使用?


答案 1

总结

Grid → New & Amazing
Table → 尊敬的和可靠的

Table是一个非常好的数据网格显示小部件,内置于Vaadin的最早版本中。

网格是从头开始的大规模重写,旨在取代表。Vaadin团队正在利用他们从经验中获得的智慧,“如果我们当时知道我们现在所知道的”,以便在当今的Web技术中实现最好的数据网格。网格是一件大事,它有自己的虚荣页面。有关快速概述,请参阅此公司博客文章

所以,一般来说,我建议你专注于Grid。尝试一下,先学习,看看它是否符合你的需求。如果遇到 bug 或问题,或者需要 Grid 中缺少的功能,请回退到 Table。您可以在项目中混合搭配两者,但需要注意的是,不同的外观和行为可能会使用户感到困惑。

Grid想象成充满希望并渴望跃入成年期的早熟青少年,而Table则视为成熟的成年人,在中年的黄金时期努力工作,同时梦想着一个赚得盆满钵满的未来退休,驶向夕阳。

如果使用Vaadin 6,在一个持续的项目上,或者你需要支持非常旧的浏览器,那么这是你唯一的选择。 需要 Vaadin 7 或更高版本。TableGrid

以下是 Grid 中目前缺少的一些主要表功能。

  • 拖放功能(稍后添加)。
  • 通过用户拖动列标题的边缘来调整列的大小。

两者共享许多功能。他们练习延迟加载到浏览器,仅在需要时从服务器端自动加载数据,以免Web浏览器过载。两者都允许用户拖动列以重新排序。两者都允许用户显示/隐藏列。

行选择

两者都允许选择单行或多行。

网格还具有自动功能,可在其中添加一列复选框。用户可以通过单击这些复选框而不是使用鼠标或鼠标+键盘来选择多行。许多(如果不是大多数)用户在鼠标驱动的多行选择方面都很笨拙。请参阅此屏幕截图,并注意第一列。

对选择的编程支持是不同的。Grid 不扩展 AbstractSelect,而是定义自己的选择 API。调用 addSelectionListener() 并定义一个 SelectionListener。参见瓦丁书

页眉和页脚

两者都有页眉和页脚,但Grid有更多的选择。网格可以放置构件而不是文本。网格可以有多行标题。网格可以连接标题单元格,就像在 HTML 表中跨越一样。

就地编辑

两者都提供数据的就地编辑,但方式不同。表格允许编辑单元格中的数据。Grid采用了一种不同的方法,通过显示一个迷你窗口,一个小的数据输入表单来编辑整行。此表单包括一对确认和取消按钮。此表单比 Table 的单元格编辑要灵活得多。

滤波

Grid 提供用户控制的筛选,其中一行可输入单元格显示在标题下方。当用户键入时,将应用筛选器以仅显示匹配的行。请参阅此屏幕截图。使用表,您需要创建某种用户界面并应用筛选。

由数据容器提供支持

更新:Vaadin 8带来了新版本的Grid,它利用了新改进和大大简化的数据模型。这是使用网格而不是表的主要原因。请注意,原始网格和表格仍然可以通过Vaadin 7兼容层在Vaadin 8中使用。

以下旧信息完好无损...

Table 和 Grid 都是一个仅表示的小部件,由一个单独的数据对象支持,该对象根据 Vaadin 数据模型实现容器接口。

Table 类还充当容器,这总是让我感到困惑。我很高兴看到Grid保持更清晰的明显分离。

与 Table 一样,Grid 确实为快速和肮脏的情况提供了一些方便的方法,在这些情况下,您希望在不正式生成容器的情况下向 Grid 本身抛出一些数据。但是 Grid 的便利方法使用术语,而不是容器的属性项。这些术语更清楚地表明,您正在与网格通信,但网格正在代表您对其默认附加的索引容器实例执行操作。

单元格内容

更新:在Vaadin 8.1中,Grid获得了在单元格中显示组件的能力。观看组件渲染器的实时演示

单元格内容处理是不同的。网格不能直接显示列图标,也不能将组件(构件)放在单元格中。而是使用了新的渲染器功能。

Doc & Demo

两者在《瓦丁之书》中都有一章,一章是关于表格的,一章是网格的

两者都有现场演示。一个用于表(和树表)。还有一对网格,一个完整的窗口一个各个方面

请参阅此 Grid 手册页面,包括嵌入式实时演示,以及指向更多演示的链接。

其他差异

Grid 具有一个内置小部件,用于将数字显示为小温度计小部件。请参阅最后一列中的此屏幕截图

有关更具体的差异,请参阅《Vaadin书》5.24.1节概述 - 与表格的差异

Esoterica...Grid是Vaadin Components中的第一个组件,Vaadin Components是一组基于Google Polymer构建的高质量Web组件,可以与任何支持Web组件的框架一起使用。虽然Vaadin团队已经承诺在未来的几年内支持Table,但不要指望它会受到如此特别的关注。

瓦丁 8

在Vaadin 8.0和8.1中,Grid变得越来越好。主要增强功能包括:

  • 与 Vaadin 8 中新增的更简单时尚的数据模型配合使用
    • 传递要显示的实体集合
    • 使用类型安全的 lambda 语法轻松定义列
      grid.addColumn( Person::getFirstName ).setCaption( "First Name" );
    • 现在更容易延迟加载数据,现在已经消失了:Container
      grid.setDataProvider( ( sortorder , offset , limit) -> service.findAll( offset , limit) , () -> service.count() );
  • 能够显示 Vaadin 组件,而不仅仅是渲染器
  • 通过 HTML5 定义的拖放支持进行拖放。
  • 速度更快

表组件仍然可以通过Vaadin 8中的兼容性层获得,以继续使用Vaadin 7类。

前途

Vaadin团队对Grid有很好的计划,所以你在StackOverflow页面上读到的大部分内容都会改变。该团队将在未来几个月和几年内热切地添加功能,增强功能和错误修复。在 Grid 的短暂历史中,已经对 Grid 进行了许多增强,因此在阅读有关限制或缺少功能的旧文档时要小心 - 可能不再如此。


答案 2

Grid是一个新的更强大的组件,它应该是Table的继承者(参见Table已经死了,Grid万岁)。因此,应该没有必要偏爱表格而不是网格。

以下是Vaadin aboout从Table迁移到Grid的系列文章中的第一篇:https://vaadin.com/blog/-/blogs/mission-rip-table-migrate-to-grid-basic


推荐