Kendo 设置值后多选过滤

Kendo multiselect filtering after setting value

我的情况相当复杂,我有一个 kendo 网格,其中包含每条记录的一些详细信息。在这些细节中,有一个 kendo multiselect 提供服务器端过滤功能。 我希望能够"edit"每条记录的详细信息并改变多select的值。如果用户决定取消修改,我希望能够恢复到输入的旧值。

我为此使用的代码如下:

function onEditCancel(e) {
    revertMultiSelect(e.model.uid); 
    //using the uid will help us to only revert the desired multiselect 
}

function revertMultiSelect(uid)
{
    var originalState = originalStateDictionary[uid]; 
    //this dictionary has the desired initial state
    if (originalState != null) {
        var multiSelect = $("#my_multiselect" + uid).data("kendoMultiSelect");                    
        multiSelect.dataSource.data(originalState.InitialDataSource);                    
        multiSelect.value(originalState.InitialSelectedIds);
    }
}

当对 multiselect 值的唯一单个修改涉及删除时,该过程完全正常,在该行上单击取消后,成功恢复了 multiselect 的状态(旧值已预先填充)。

但是,一旦我决定添加一个新值(在服务器端过滤操作完成后)并且我决定取消该操作,这将停止 revertMultiSelect 函数按预期停止工作。

更具体地说,一旦代码到达 multiSelect.value(originalState.InitialSelectedIds); 行,过滤将再次触发并使用空值(我可以在我的服务器端拦截过滤请求)。当我唯一的操作是删除一个值时,这不会被触发,并导致 multi select 丢失所有 selected 值并显示为空。

我觉得如果我能以某种方式阻止过滤在取消操作时发生,我就可以阻止 multiselect 擦除 itself.I 已尝试按照指示重置过滤器 here 但没有成功。

有什么我想念的吗? 问候 路易斯.

UPDATE 我添加了以下 JSFiddle http://jsfiddle.net/8us1fvy1/2/

工作流程 1:

  1. 删除项目
  2. 点击取消按钮
  3. 没有指标变化

工作流程 2:

  1. 添加元素(即键入 'Chef')
  2. 看看过滤事件是如何触发一次的
  3. 点击取消按钮
  4. 看看过滤器事件是如何被再次触发的(我不知道为什么在这种情况下这些值没有被删除,在我的场景中它们被删除了。重要的是,然而,过滤器被再次触发)

我不知道 Kendo 团队是否计划更改此行为,因此如果您无法更改服务器端代码,您可以将此功能添加到您的多选数据源中作为解决方法:

requestStart: function(e){
    if(e.sender.filter().filters.length === 0){
        // cancel event to prevent sending request to server
        e.preventDefault();

        // trigger revert function again to set original state data
        revertMultiSelect();
    }
}

已更新 fiddle:http://jsfiddle.net/8us1fvy1/2/