gpt4 book ai didi

javascript - 在添加新节点后删除节点后,kendoTreeView 不会重新渲染

转载 作者:行者123 更新时间:2023-12-03 22:51:57 26 4
gpt4 key购买 nike

有两个事件处理程序:一个向树添加一个节点,另一个 - 删除它。它按预期工作正常,直到通过调用“检查”事件删除节点。

这是一棵树(在节点检查时 - 它被删除):

$('#folderAttributeTree').kendoTreeView({
dataSource: this.attributeTree,
dataRole: "treeview",
dataTextField: "name",
checkboxes: true,
loadOnDemand: true,
check: function(e) {
var treeView = e.sender,
checkedNode = e.node;
treeView.remove(checkedNode);
},
dataBound: function(e) {
if (!this.dataSource.data().length) {
this.element.append("<li class='no-items'>No items yet.</li>");
} else {
this.element.find(".no-items").remove();
}
}
}).data("kendoTreeView");

这是添加节点方法(它创建始终嵌套的元素):
addLabel: function(e) {
e.preventDefault();

var label = this.get('folder_label'),
folderAttributeTree = $("#folderAttributeTree").data("kendoTreeView"),
attributeTree = this.get('attributeTree')
data = [];

if (label !== null && label !== '') {

if (attributeTree.length) {

data = attributeTree;

var i = 0;

while (data.length) {
data = data[0].items;
i++;
}

data.push({
name: label,
type: 'folder',
expanded: true,
id: i,
items: [],
hasChildren: true,
itemIndex: 0
});

} else {

this.set('attributeTree', [{
name: label,
type: 'folder',
expanded: true,
id: 0,
items: [],
hasChildren: true,
itemIndex: 0
}]);

}
}

this.set('folder_label', '');

folderAttributeTree.setDataSource(this.attributeTree);

}

问题是,当我在删除节点后尝试添加节点时 - Treeview 不再重新渲染(但是,如果我检查 console.log 数据将按原样添加到对象中)。

我是 kendo-ui 的新手。请帮我解决这个问题。

先感谢您!

最佳答案

将我的问题提交给 Teleriks 支持后,他们回答了一个非常有用的提示,这使我找到了解决方案。
对于那些有类似问题的人,这里是解决方案:

addLabel: function(e) {
e.preventDefault();

var label = this.get('folder_label'),
folderAttributeTree = $("#folderAttributeTree").data("kendoTreeView"),
attributeTree = this.get('attributeTree');

if (label !== null && label !== '') {

if (attributeTree.length) {

var deepest = this.findDeepest(this.attributeTree[0]);

folderAttributeTree.append({
name: label,
type: 'folder',
expanded: true,
id: deepest.id + 1,
items: [],
hasChildren: true
}, $("#folderAttributeTree .k-item:last"));

} else {

this.set('attributeTree', kendo.observableHierarchy([{
name: label,
type: 'folder',
expanded: true,
id: 0,
items: [],
hasChildren: true
}]));

}
}

this.set('folder_label', '');

folderAttributeTree.setDataSource(viewModel.attributeTree);

}

有用的提示是使用 .append 方法而不是 .push我没有注意到 append 方法具有名为 parentNode 的第二个(可选)参数,这显然对我的情况很有帮助。

关于javascript - 在添加新节点后删除节点后,kendoTreeView 不会重新渲染,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56327131/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com