您可以在以下example中观察到所描述的问题。
我有一个网格和一列,可以通过标题列单元格和筛选器菜单进行过滤。
网格的配置如下:
filterable: {
mode: "menu, row"
}
特定列的配置如下:
filterable: {
multi: true,
cell: true
}
过滤器的效果很好,但存在一个明显的UI问题,即标题过滤器单元格中仅显示第一项(例如本例中的“ Nancy”)。
有没有办法让它显示所有选中的项目(例如“南希·安德鲁”之类的东西)?
我在kendo docs的网格小部件中没有找到任何此设置,所以我想知道是否有任何解决方法?
我在网格中还有另一列(“姓氏”),例如here。 在这种情况下,我有一个用于过滤器菜单的自定义多选小部件,然后在其中选择了2个项目(“ Davolio”和“ Fuller”):
但是我想像上面的问题一样用简单的多检查过滤器来实现。
我还尝试过手动同步过滤器,例如here。
简而言之,在网格的filterMenuInit
事件中,我使用复选框挂接到过滤器菜单中的'click'事件,将检查后的值作为数组获取,并将其设置为标题单元格过滤器“自动完成”小部件:
filterMenuInit: function(e) {
const config = e.sender.options.columns.find(c => c.field === e.field);
if (((config || {}).filterable || {}).multi) {
const quickFilter = $('.k-filter-row .k-filtercell[data-field=' + e.field + '] input[data-role=autocomplete]').data('kendoAutoComplete');
e.container.on('click', '[type=submit]', function() {
const multiCheck = e.sender.thead.find('[data-field=' + e.field + ']').data('kendoFilterMultiCheck');
if (!multiCheck || !quickFilter) return;
const values = multiCheck.container
.find('input[type=checkbox]:not(.k-check-all)')
.filter((i, x) => x.checked)
.map((i, x) => x.value)
.get();
if (values && values.length > 1) {
quickFilter.value(values);
}
});
}
},
点击“过滤器”后,我可以立即看到所需的结果(例如“南希·安德鲁”),但是在dataBound
之后,它会重置为仅第一项(“南希”)。
这似乎是由于标头过滤器单元输入的MVVM绑定到网格过滤器<input data-bind="value: value"
而发生的。删除它也不是一件好事,因为它会破坏很多与过滤有关的内容。
有什么想法吗?