Dynatree不会以编程方式重新加载新节点

时间:2013-09-29 03:04:34

标签: jquery dynatree jquery-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 个答案:

答案 0 :(得分:1)

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

$("#tree").dynatree("getRoot").removeChildren();

答案 1 :(得分: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);
   }

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