1

我有一个带有父节点和子节点的2 级 Kendo UI Treeview 。当我检查父节点时,会自动检查所有子节点(包括父节点)。

现在我想发送一个具有当前树选择状态的事件。问题是当我尝试在dataSource.change方法中执行此操作时,因为它会分别触发每个复选框选择(1 个父节点 + 3 个子节点 = 4 个更改事件)。这是代码的样子:

treeView.data("kendoTreeView").dataSource.bind("change", function() {
    alert('event fired!');
});

我在这里创建了一个工作示例

是否有另一个事件要附加到所有复选框更新后只触发一个事件?或者也许有一种方法可以将所有这些“更改”事件分组并只触发一个?

4

1 回答 1

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标志。

于 2013-04-15T09:26:45.967 回答