jsTree删除节点实际上并没有删除它

时间:2012-07-05 17:46:26

标签: jquery-plugins jstree

希望你能帮助解决我遇到的jsTree问题...最近才开始使用它,所以仍然找不到我的脚。

我在同一页面上使用两个jsTrees,(左侧是可用对象,右侧是Included对象),中间有几个按钮,用户可以将对象从左侧树移动到右侧树,反之亦然。我没有使用dnd插件,也不打算让用户能够在树之间拖放。我的数据结构只有两个层次,父母和孩子/多个孩子。

另一件需要提及的是,当我将一个节点从一个树移动到另一个树时,它将从该树中删除并在另一个树中创建。

那么我遇到的问题是,我可以在左侧树中选择一个节点(父节点或其中一个子节点),然后单击按钮后可以将其移动到右侧树。如果我选择的节点是父节点,它将移动父节点和所有子节点。如果我选择的节点是唯一的子节点,它将同时移动父节点和子节点。让我们坚持这个例子的场景。我通过以下方式做到这一点:

//Check to see if the parent exists in the right tree, if it doesn't create it
I've left this function call out for now but can post later if required
//Assuming the parent doesn't exist, create the parent in the right tree
$("#treeInc").jstree("create", null, false, { attr: { id: parent.id }, data: $(parent).children("a").text() }, false, true);
//Create the child in the right tree belonging to the parent node
$("#treeInc").jstree("create", $("#" + parent.id), "inside", { attr: { id: child.id }, data: $(child).children("a").text() }, false, true);

//Remove the parent and child from the left tree
$("#treeAvail").jstree("remove", $('#' + child.id));
$("#treeAvail").jstree("remove", $('#' + parent.id));

现在这一切都很好但我遇到的问题是当我尝试将节点移回左侧树时,父级似乎总是存在于数据中,即使应该已经删除了。这意味着我实际上并没有调用代码来创建父代,而只是调用子代,它最终会自行挂起,看不到父代。

所以我的逻辑是首先通过基本上在属于右树的节点中查找父ID来检查父节点是否存在。到目前为止,我已经完成了几种不同的方式,每次都失败了。

我已经调用左树的'get_json'函数来循环遍历节点,但它存在于那里。 我循环我最初加载左树的数组,但是从初始加载开始有所有节点,似乎永远不会改变。 我试图使用'delete_node'而不是删除,但没有区别。

那么我做错了什么?如果我从jsTree中删除一个节点,就数据而言,我怎么能检查那棵树才能看到它已经消失了?

请帮助,它让我疯了!!!

我的实际树数据来自Web服务,但是对于这个例子,下面的json数组将会这样做。

availDataCache = [
        { attr: { id: "A_R1" }
          , data: "Report 1"
          , state: "open"
          , children: [{ attr: { id: "A_PSA1" }, data: "Param Set A"}]
        }
        , { attr: { id: "A_R2" }
            , data: "Report 2"
            , state: "open"
            , children : [ 
                  { attr: { id: "A_PSA2" }, data: "Param Set A" }
                  ,{ attr: { id: "A_PSB1" }, data: "Param Set B" }
                   ]
          }
        ];

$("#treeAvail").jstree({
    "json_data": {
        "data": availDataCache
    },
    "core": {
        "animation": 0
    },
    "plugins": ["themes", "json_data", "ui", "core", "crrm"]
});

$("#treeInc").jstree({
    "json_data": {
        "data": incDataCache
    },
    "core": {
        "animation": 0
    },
    "plugins": ["themes", "json_data", "ui", "core", "crrm"]
});

1 个答案:

答案 0 :(得分:0)

尝试在每次复制,移动,删除操作后为两个jstree调用刷新功能。

$("#leftjsTree").jstree("refresh" ,"#idOfLeftNode");
$("#rightjsTree").jstree("refresh" ,"#idOfRightNode");