我有一个相当复杂的情况,我有一个剑道网格,每个记录都有一些细节。在这些细节中,有一个kendo 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值的唯一单个修改涉及删除时,该过程完全正常。在单击行上的取消后,多次选择的状态将成功恢复(旧值已预先填充)。
但是,一旦我决定添加一个新值(在完成服务器端过滤操作之后)并且我决定取消该操作,这将停止revertMultiSelect函数停止按预期工作。
更具体地说,一旦代码到达行multiSelect.value(originalState.InitialSelectedIds);
,就会再次使用emtpy值触发过滤(我可以拦截服务器端的过滤请求)。当我唯一的操作是删除一个值时,不会触发此操作,并导致多重选择丢失所有选定的值并显示为空。
我感觉如果我能以某种方式阻止在取消操作上发生过滤,我可以阻止多重选择擦除自身。我已经尝试重置过滤器,如图所示here但没有成功。< / p>
我有什么遗失的吗? 问候 路易斯。
更新我添加了以下JSFiddle http://jsfiddle.net/8us1fvy1/2/
工作流程1:
工作流程2:
答案 0 :(得分:1)
我不知道Kendo团队是否计划更改此行为,因此如果您无法更改服务器端代码,则可以将此功能添加到multiselect dataSource作为解决方法:
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();
}
}