我有一个相当复杂的情况,其中我有一个剑道网格,其中包含每条记录的一些详细信息。在这些细节中,有一个提供服务器端过滤功能的剑道多选。我希望能够“编辑”每条记录的详细信息并更改多选的值。如果用户决定取消修改,我希望能够恢复输入的旧值。
我为此使用的代码如下:
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);
过滤就会再次触发一个空值(我可以在我的服务器端拦截过滤请求)。当我唯一的操作是删除一个值时,这不会被触发,并导致多选丢失所有选定的值并显示为空。
我的感觉是,如果我能以某种方式阻止在取消操作上发生过滤,我可以阻止多选自行擦除。我已尝试按照此处所示重置过滤器, 但没有成功。
有什么我想念的吗?问候路易斯。
更新我添加了以下JSFiddle http://jsfiddle.net/8us1fvy1/2/
工作流程 1:
- 删除项目
- 点击取消按钮
- 无指标变化
工作流程 2:
- 添加一个元素(即输入'Chef')
- 查看过滤器事件如何被触发一次
- 点击取消按钮
- 看看如何再次触发过滤器事件(我不知道为什么在这种情况下值不会被删除,在我的场景中它们会删除。但是,重要的是过滤器再次被触发)