自定义Vaadin Flow Grid组件的选择列标题

是否可以在Vaadin Flow Grid中调整(自动创建的)选择列的列标题?

我的用例:“全选”按钮/复选框应该可见(尽管没有内存中的数据提供程序),并且当选择所有项目时,如果所有项目数超过100,它应该显示警告。此外,视觉效果应表明未选中/全部选中/全部选中。

就我浏览文档/代码而言,我没有发现任何可能性。任何想法表示赞赏。我正在使用Vaadin 14。

aiqingchufeng2 回答:自定义Vaadin Flow Grid组件的选择列标题

这不是一个真实/完整的答案,它最初是作为注释写的。但是我不想阻塞评论,所以我将它们移到了这个“答案”中。我描述了我认为需要的方法,但是我不确定这是否是最好的方法。请采纳我的建议。不要为此给我赏金。

看到没有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组件中的自定义事件。

,

部分解决方法是通过以下代码启用选择列标题中的内置复选框:

var model = (AbstractGridMultiSelectionModel<?>) grid.getSelectionModel();
model.setSelectAllCheckboxVisibility(GridMultiSelectionModel.SelectAllCheckboxVisibility.VISIBLE);

默认情况下,当数据提供者不在内存中时,该复选框处于隐藏状态,但是此替代方法将再次显示该复选框。

本文链接:https://www.f2er.com/3118220.html

大家都在问