0

当页面加载如下时,我正在以编程方式加载 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);
   }

它确实重新加载,但无法通过延迟加载填充子节点

4

2 回答 2

1

这将删除您在初始加载期间添加的所有节点:

$("#tree").dynatree("getRoot").removeChildren();
于 2013-09-29T11:46:56.537 回答
0

最后我让它工作了。我用这一行更改了代码

 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);
   }

我很确定这不是最好的解决方案。因此,如果有人有更好的方法,请发布另一个答案。

于 2013-09-29T08:14:41.040 回答