具有 AngularJS 取消选中复选框的 KendoUI Treeview

KendoUI Treeview with AngularJS uncheck checkboxes

我正在使用 KendoUI (v2015.1.318) 和 AngularJS (v1.3.14)。每次点击一个节点后,数据将从 API 中获取。 选择一些项目并单击按钮 "add" 后,项目将添加到单独的列表中,展开的树节点必须保持可见,但所有 勾选的项目必须取消勾选。

在我遍历数据源以取消选中选中的项目后,我再次调用了 SetDataSource。当我扩展了很多节点并检查了一些节点时,UI 在处理时冻结了几秒钟。

我想知道是否有更有效的方法来执行此操作。

我做了一个没有 API 调用的例子:

    $scope.saveTreeFields = function () {
    var data = $scope.tree.dataSource._data;
    for (var i = 0, j = data.length; i < j; i++) {
        checkChildren(data[i]);
    }
    function checkChildren(data) {
        if (data.checked) {
            data.checked = false;
        }
        if (data.items !== undefined) {
            for (var i = 0, j = data.items.length; i < j; i++) {
                checkChildren(data.items[i]);
            }
        }
    }
     $scope.tree.setDataSource(data)
};

Plunker example

收到 Telerik 本身的答复。

you can call the dataItem set("checked", false) method to notify the model of the field change, and the TreeView will update automatically.

代码更改

    $scope.saveTreeFields = function () {
    var data = $scope.tree.dataSource.data();
    for (var i = 0, j = data.length; i < j; i++) {
        checkChildren(data[i]);
    }
    function checkChildren(data) {
        if (data.checked) {
            data.set("checked", false);
        }
        if (data.items !== undefined) {
            for (var i = 0, j = data.items.length; i < j; i++) {
                checkChildren(data.items[i]);
            }
        }
    }
};