有2棵树。 菜单树和类别树,这两个树中的节点都可以在其自身的树中移动(重新排序),并且类别树中的节点也可以移动(拖放)到菜单树。
我绑定(bind)move_node的回调,每次将节点拖放到其树中或将节点拖放到另一棵树时,都会执行此回调。我的代码:
// bind move node from one parnt to another event
.bind("move_node.jstree", function (e, data) {
data.rslt.o.each(function (i) {
$.ajax({
async : false,
type: 'POST',
url: "/menus/move/",
dataType: 'json',
data : {
"operation" : "move_node",
"id" : $(this).attr("id").replace("node_",""),
"parent" : data.rslt.cr === -1 ? 1 : data.rslt.np.attr("id").replace("node_",""),
"oldParent" : data.rslt.op.attr("id").replace("node_",""),
"position" : data.rslt.cp + i,
"oldPosition" : data.rslt.cop,
"title" : data.rslt.op.children("a").text()
} });
});
})
如何检测此移动的节点是用于另一棵树还是同一棵树。
最佳答案
根据文档,data.rslt
回调函数中的move_node
是 move
对象。
在此对象中,属性ot
和rt
(分别为原始树实例和引用树实例)可用于检查该节点是放在同一棵树中还是在另一棵树中:
.bind("move_node.jstree", function (e, data) {
if(data.rslt.ot != data.rslt.rt) {
console.log("Node was moved to a different tree-instance");
}
else {
console.log("Node was moved inside the same tree-instance");
}
});