Jquery 设置值后的剑道多选过滤
我有一个相当复杂的情况,我有一个剑道网格,每个记录都有一些细节。在这些细节中,有一个剑道多选,提供服务器端过滤功能。 我希望能够“编辑”每条记录的详细信息,并更改multiselect的值。如果用户决定取消修改,我希望能够恢复到输入的旧值 我使用的代码如下所示: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
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)使用emtpy值再次触发代码>过滤(我可以在服务器端截获过滤请求)。当我的唯一操作是删除一个值时,不会触发此操作,并会导致多选丢失所有选定值并显示为空
我感觉到,如果我能以某种方式阻止在取消操作上进行过滤,我就可以阻止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等等)