我正在尝试实现一项功能,通过服务器过滤在kendo的多选控件中选择一个项目。当用户按下所选项目上的选项卡时。这是我的kepdown事件代码:
if (e.keyCode === 9) {
var selectedItem = multiSelect.current();
if (selectedItem) {
var selectedIndex = selectedItem.data("idx");
if (selectedIndex >= 0) {
var currentValue = multiSelect.value().slice();
var dataitems = multiSelect.dataSource.view();
var selectedDataItem = dataitems[selectedIndex];
multiSelect.dataSource.filter({});
currentValue.push(selectedDataItem.relatedId);
multiSelect.value(currentValue);
multiSelect.trigger("change");
}
}
}
但只要我在相同的数据视图中搜索它就可以正常工作,即我可以说我选择两个以云开头的值,然后我选择一个以App开头的值,然后kendo会删除以云开始的前两个值,控件将包含只在最后选择一个值。
我在kendo的函数_index中调试了kendo的代码,因为它在dataSource.view中找到了值
重新创建了该问题答案 0 :(得分:0)
您的代码无效,因为您在dataSource中将serverFiltering
设置为true
:
dataSource: {
type: "odata",
serverFiltering: true,
transport: {
read: {
url: "http://demos.telerik.com/kendo-ui/service/Northwind.svc/Products",
}
}
},
由于数据正在服务器上进行过滤,因此呼叫multiSelect.dataSource.filter({});
仅清除已过滤的数据。话虽如此,当您致电multiSelect.value(currentValue);
时,只能选择当前过滤的数据源中的值。这导致选择仅保存当前dataView中的项目。
除非您有充分理由不这样做,否则最简单的解决方法是将serverFiltering
设置为false
。