Dynatree не перезагружается с новыми узлами программно
Я загружаю Dynatree программно, когда страница загружается следующим образом
function loadTree(data)
{
var rootNode = $("#tree").dynatree("getRoot");
$.each(data, function () {
var childNode = rootNode.addChild({
title: this.agent_code + ' - ' + this.holder_name,
tooltip: this.holder_name,
isFolder: true,
key:this.agent_code,
});
});
}
Теперь, когда я получаю новые данные с сервера и хочу загрузить новые узлы, он не удаляет старый узел.
function reload(data)
{
$("#tree").dynatree("getRoot").visit(function(node){
node.remove();
});
loadTree(data)
}
Приведенный выше код удаляет только один узел. Что мне здесь не хватает заранее спасибо
ОБНОВЛЕНИЕ Я попытался с обходным путем через следующий код
function reload(data)
{
$("#tree").remove();
$('#test').html('<div id="tree"></div>');
$('#tree').dynatree(); //reinitialize the tree
loadTree(data);
}
Он перезагружается, но затем не может заполнить дочерние узлы с помощью отложенной загрузки.
2 ответа
Решение
Это удалит все узлы, которые вы добавили во время начальной загрузки:
$("#tree").dynatree("getRoot").removeChildren();
Наконец-то у меня это работает. Я изменил код с этой строкой
function reload(data)
{
//get all the available parent nodes
var n = [];
$("#tree").dynatree("getRoot").visit(function(node){
n.push(node.data.key);
});
//delete each node one by one
var tree = $("#tree").dynatree("getTree");
$.each(n,function(index,value){
var Cnode = tree.getNodeByKey(value);
if(Cnode != null) Cnode.remove();
});
loadTree(data);
}
Я уверен, что это не лучшее решение. Так что, если у кого-то есть лучший способ сделать это, пожалуйста, отправьте другой ответ.