1

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

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

我可以这样做:如何重新加载/刷新/重新初始化 DynaTree?. 但是我必须销毁并重新初始化整个树才能做到这一点,并且所有节点都会在这样做时崩溃。

我希望有一个刷新选项迭代所有树项目,丢弃不再存在的项目,添加新项目或更改已修改图标的标题/图标/数据,但我在文档中找不到类似的内容。

有什么诀窍可以做到这一点吗?也许是一个隐藏的功能,或者一个解决方法?

谢谢你的灵感,彼得

4

1 回答 1

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

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

于 2012-09-17T13:57:06.030 回答