是否可以在Vaadin Flow Grid中调整(自动创建的)选择列的列标题?
我的用例:“全选”按钮/复选框应该可见(尽管没有内存中的数据提供程序),并且当选择所有项目时,如果所有项目数超过100,它应该显示警告。此外,视觉效果应表明未选中/全部选中/全部选中。
就我浏览文档/代码而言,我没有发现任何可能性。任何想法表示赞赏。我正在使用Vaadin 14。
答案 0 :(得分:2)
这不是一个真实/完整的答案,它最初是作为注释写的。但是我不想阻塞评论,所以我将它们移到了这个“答案”中。我描述了我认为需要的方法,但是我不确定这是否是最好的方法。请采纳我的建议。不要为此给我赏金。
看到没有Java端API可以控制任何有关选择列标题的事情,我想唯一的方法就是对基础聚合物模板@vaadin/vaadin-grid/src/vaadin-grid-selection-column.js
进行更改,该模板包含一个javascript方法{{1 }}。我绝不是聚合物专家,也无法指导您进行修改。但我认为应该有可能触发一个自定义事件,您可以在Java端监听该事件,即显示一个Notification。这可能不是最好的方法,这只是我的最佳猜测。
上述聚合物模板还定义了是否应显示选择列标题-您可以从defaultHeaderTemplate的复选框中删除_onSelectAllChanged
属性,以始终显示标题复选框。
@KasparScherrer通过更改vaadin-grid-selection-column.js吗?无论如何,我想自定义复选框的行为。我希望不用js就可以做到这一点。
-斯蒂芬·哈比奇(Steffen Harbich)
如果不更改(js)聚合物模板,这是无法实现的。我可能希望在Vaadins专家聊天中询问此信息是否可以访问,或者希望他们在这里不时回答。最近,我已成功使用我描述的方法对LoginOverlay模板进行了修改。但是我对整个主题仍然不太满意。
您必须复制hidden$="[[_selectAllHidden]]"
的所有模板文件,并且要使用自己的(已修改的)模板,您必须创建自己的@vaadin/vaadin-grid
类的副本(不能扩展,因此它将不再在node_modules中查找模板)并放置您自己的Grid
。一旦在@JsModule
中触发了CustomEvent
,就可以在Java中完成复选框 behaviour 的自定义。检出@DomEvent来侦听java组件中的自定义事件。
答案 1 :(得分:0)
部分解决方法是通过以下代码启用选择列标题中的内置复选框:
var model = (AbstractGridMultiSelectionModel<?>) grid.getSelectionModel();
model.setSelectAllCheckboxVisibility(GridMultiSelectionModel.SelectAllCheckboxVisibility.VISIBLE);
默认情况下,当数据提供者不在内存中时,该复选框处于隐藏状态,但是此替代方法将再次显示该复选框。