我有一个 2级Kendo UI Treeview ,包含父节点和子节点。 当我检查父节点时,将自动检查所有子节点(包括父节点)。
现在我想发送一个具有当前树选择状态的事件。 问题是当我尝试在 dataSource.change 方法中执行此操作时,因为单独触发每个复选框选项(1个父节点+ 3个子节点= 4个更改事件)。这就是代码的样子:
treeView.data("kendoTreeView").dataSource.bind("change", function() {
alert('event fired!');
});
我创建了一个工作示例here
是否还有另一个要附加的事件,以便在更新所有复选框后仅触发一个事件? 或者也许有一种方法可以将所有这些“变化”事件分组,而只是激活一个?
答案 0 :(得分:1)
我已经用这个解决方案结束了:
tree.data("kendoTreeView").dataSource.bind("change", function() {
treeView = tree.data("kendoTreeView");
checkedNodes = [];
checkedNodeIds(treeView.dataSource.view(), checkedNodes);
if (!timeoutSet) {
setTimeout(fireCheckboxChangeOnce, 50);//fires only one event when parent checkbox checks all the children
timeoutSet = true;
}
});
只有第一个事件会创建一个延迟的函数调用(使用 setTimeout())。 所有剩余的“更改”事件仅修改 checkedNodes 参数。
fireCheckboxChangeOnce 函数也会清除 timeoutSet 标志。