希望你能帮助解决我遇到的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"]
});
答案 0 :(得分:0)
尝试在每次复制,移动,删除操作后为两个jstree调用刷新功能。
$("#leftjsTree").jstree("refresh" ,"#idOfLeftNode");
$("#rightjsTree").jstree("refresh" ,"#idOfRightNode");