0

我有一个 200 多行的 TreeView。

当我单击复选框时,执行检查大约需要 1 秒。

当我单击标题复选框时,它会冻结浏览器。

这是我在标题复选框更改时使用的代码:

function toggleAll(e) {
        setTimeout(function() {
                const view = dataSource.view();
                const checked = e.target.checked;

                //$(`input[data-name=${e.target.dataset.name}]`).prop('checked', checked);
                for (let i = 0; i < view.length; i++) {
                    view[i].set(e.target.dataset.name, checked);
                }
            },
            0);
    }

这是 jsfiddle 网址

4

1 回答 1

1

由于某种原因(“toggleAll 未定义”),我无法让您的示例运行,但性能缓慢的原因是因为使用了 .set()。

每次调用 .set() 时,都会导致 TreeList 完全重新绑定到更改的数据源。

您可以通过在循环中“直接”更改字段值而不是使用 MVVM .set() 来避免这种情况,然后在完成后触发单个重新绑定,即:

for (let i = 0; i < view.length; i++) {
    // Does not trigger a rebind of TreeList and its dataSource.
    view[i][e.target.dataset.name] = checked;
}
// Now that the dataSource is done being mass updated, trigger a single rebind.
$("#treelist").getKendoTreeList().refresh();

示例:http ://dojo.telerik.com/@Stephen/OmoNu

于 2017-01-03T16:04:34.120 回答