Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/78.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Jquery 设置值后的剑道多选过滤_Jquery_Kendo Ui_Kendo Asp.net Mvc_Multi Select_Kendo Multiselect - Fatal编程技术网

Jquery 设置值后的剑道多选过滤

Jquery 设置值后的剑道多选过滤,jquery,kendo-ui,kendo-asp.net-mvc,multi-select,kendo-multiselect,Jquery,Kendo Ui,Kendo Asp.net Mvc,Multi Select,Kendo Multiselect,我有一个相当复杂的情况,我有一个剑道网格,每个记录都有一些细节。在这些细节中,有一个剑道多选,提供服务器端过滤功能。 我希望能够“编辑”每条记录的详细信息,并更改multiselect的值。如果用户决定取消修改,我希望能够恢复到输入的旧值 我使用的代码如下所示: function onEditCancel(e) { revertMultiSelect(e.model.uid); //using the uid will help us to only revert the de

我有一个相当复杂的情况,我有一个剑道网格,每个记录都有一些细节。在这些细节中,有一个剑道多选,提供服务器端过滤功能。 我希望能够“编辑”每条记录的详细信息,并更改multiselect的值。如果用户决定取消修改,我希望能够恢复到输入的旧值

我使用的代码如下所示:

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.initialselectedds)过滤(我可以在服务器端截获过滤请求)。当我的唯一操作是删除一个值时,不会触发此操作,并会导致多选丢失所有选定值并显示为空

我感觉到,如果我能以某种方式阻止在取消操作上进行过滤,我就可以阻止multiselect自动擦除。我曾尝试按指示重置过滤器,但没有成功

我有什么遗漏吗? 问候语 路易斯

更新我添加了以下JSFIDLE

工作流程1:

  • 删除项目
  • 点击取消按钮
  • 没有指标变化
  • 工作流程2:

  • 添加一个元素(即键入“Chef”)
  • 查看如何触发筛选器事件一次
  • 点击取消按钮
  • 查看如何再次触发筛选器事件(我不知道为什么在这种情况下,值不会被删除,在我的场景中,它们会被删除。但重要的是,筛选器会再次触发)

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

    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:

    差不多一个月前,我用我公司的订阅打开了同一期的门票。这是一只虫子。您需要在捕获虚假请求时清除服务器端的所有数据源请求筛选器。您是否在剑道论坛上打开此问题?您能告诉我在哪里可以找到这张票吗?这是私人票。然而,关键是我的小部件的数据源(在我的例子中是下拉列表)在对小部件执行某些客户端操作后触发了包含“”的筛选器事件。我通过清除过滤器服务器端解决了这个问题。希望这对你也有帮助。谢谢!这对我来说是可行的,但是我删除了对reversmultiselect()的二次调用,因为这将创建一个无限循环(在multiselect中设置值将触发requeststart等等)