带选项卡键选择的Kendo多选

时间:2015-06-02 15:24:44

标签: javascript jquery kendo-ui telerik kendo-multiselect

我正在尝试实现一项功能,通过服务器过滤在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中找到了值

我已在http://dojo.telerik.com/OtAvi

重新创建了该问题

1 个答案:

答案 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