2013-12-07 147 views
4

有2棵树。 菜单树类别树,树中的一个节点可以在其树中移动(重新排序),同时类别树中的节点可以移动(拖放)到菜单树。 我绑定了move_node的回调函数,每当一个节点在其树中拖拽时,或者拖拽一个被拖拽到另一棵树上的节点时,该回调函数就会执行。我的代码:jstree中两棵树之间的拖放

// 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() 
      }   }); 
    }); 
}) 

如何检测此移动的节点是针对另一棵树还是针对同一棵树。

回答

3

根据文档,move_node回调函数中的data.rslt是一个move对象。

在该对象的属性和otrt(原点树实例和参考分别树实例)可用于检查该节点是否在相同的树或不同的一个下降:

.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"); 
    } 
});