如何重新刷新jquery dynatree而不再重新渲染它?

时间:2012-09-13 12:12:24

标签: jquery refresh jquery-dynatree

在我的webapp中,我使用dynatree显示一个数据树,可以使用拖放(用于层次结构更改)和自定义链接(用于更改项目的状态)进行编辑。 删除或单击链接后,每个更改都会直接保存到数据库中。

为防止树及其后端模型由于任何情况而不同步,我想在每次修改后完全更新树。

我可以这样做:how to reload/refresh/reinit DynaTree?。但我必须销毁并重新初始化完整的树才能执行此操作,并且所有节点都会崩溃。

我喜欢刷新选项,遍历所有树项,丢弃不再存在的项目,添加新项目或更改已修改图标的标题/图标/数据,但我在文档中找不到这样的内容

有什么技巧可以达到这个目的吗?可能是一个隐藏的功能,还是一种解决方法?

感谢您的灵感, 彼得

1 个答案:

答案 0 :(得分:2)

由于似乎没有(至少我找不到)根据其后备javascript数据对象更新树(或部分树)的任何内置功能,我编写了这个帮助方法来更新树(或其中的一个分支):

编辑:添加或删除子项时,以前的方法实现不起作用。更新它以丢弃所有子节点并再次添加所有子节点:

  function updateNodeRecursively(node, data, includeSelf) {
    if(includeSelf == undefined) includeSelf = true;
    if(includeSelf) node.data = data;
    node.removeChildren();
    if(data.children) {
      for(var i=0; i<data.children.length; i++) {
        var cnode = node.addChild(data.children[i]);
        updateNodeRecursively(cnode, data.children[i],false)
      }
    }

它使用与从JavaScript初始化树时使用的data相同的结构,树可以完全或部分更新,具体取决于您作为第一个参数传递的节点。