【问题标题】:Kendo multiselect filtering after setting value设置值后的剑道多选过滤
【发布时间】:2017-04-28 17:58:54
【问题描述】:

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

我使用的代码如下:

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);
    }
}

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

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

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

我的感觉是,如果我能以某种方式阻止过滤发生在取消操作上,我可以阻止多选自行擦除。我已尝试按照here 指示重置过滤器,但没有成功。

我有什么遗漏吗? 你好 路易斯。

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

工作流程 1:

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

工作流程 2:

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

【问题讨论】:

  • 大约一个月前,我用公司订阅的同一问题开了一张票。这是一个错误。您需要在捕获虚假请求时清除所有数据源请求过滤器服务器端。
  • 你在剑道论坛上打开过这个问题吗?你能告诉我在哪里可以找到这张票吗?
  • 这是私人票。然而,关键是我的小部件的数据源(在我的情况下为下拉)在对小部件进行一些客户端操作后触发了包含包含:'' 的过滤器事件。我通过清除过滤器服务器端解决了。希望这对您也有帮助。

标签: jquery kendo-ui kendo-asp.net-mvc multi-select kendo-multiselect


【解决方案1】:

我不知道 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();
    }
}

更新小提琴:http://jsfiddle.net/8us1fvy1/2/

【讨论】:

  • 谢谢!这对我有用,但是我删除了对 reverMultiSelect() 的辅助调用,因为这会创建一个无限循环(在多选中设置值会触发 requeststart 等等)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-06-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-05-18
  • 1970-01-01
相关资源
最近更新 更多