JSTREE,准确的移动位置

时间:2011-02-17 10:44:02

标签: drag-and-drop jstree

我希望在树视图中拖放树节点时显示明确的工具提示。

示例:“节点1将在节点2之前/之后/之内移动”

从move_node回调参数,我们可以获得位置(“之前/之后/内部”),但不能从check_move回调(不是来自prepare_move)获取。 拖放时应显示工具提示,因此move_node为时已晚。

将外部对象拖放到树视图时,同样的问题,来自dnd插件的drag_check回调没有关于位置的信息(我们只知道目标节点,但不知道它是在之前,之后还是之内)。 在这种情况下,即使是drag_finish回调,我们也没有这些信息。

有人可以帮我解决这个问题吗?

2 个答案:

答案 0 :(得分:1)

我刚刚测试了这个,并且它在prepare_move上工作正常......

.bind("prepare_move.jstree",function(event, data) {
        console.log("o : " + data.rslt.o.attr("id"));
        console.log("r : " + data.rslt.r.attr("id"));
        console.log("p : " + data.rslt.p);
 })

这是记录的内容

o : item_3
r : item_2
p : inside

我正在使用JSTree v1.0RC2

答案 1 :(得分:0)

这里我用jQuery插件jDialog来做这件事(或者你可以用一个简单的jAlert函数替换它):

.bind("move_node.jstree", function (e, data) {
  var id = data.rslt.o.attr("id").replace("node_","");
  var name = data.inst.get_text(data.rslt.obj);

  jConfirm('Moving node name:' + name, 'dialog title'), function(answer) {
    if (answer == true){           
      $.post("/js_trees/"+ id,
        {
          "_method" : "put",
          "operation" : "moving_my_node",
          "id" : data.rslt.o.attr("id").replace("node_",""),
          "ref" : data.rslt.np.attr("id").replace("node_",""),
          "position" : data.rslt.cp,
          "title" : data.rslt.name,
          "copy" : data.rslt.cy ? 1 : 0
        },
        function (r) {
          if(!r.status) {
            $.jstree.rollback(data.rlbk);
          } else {
            $(data.rslt.oc).attr("id", "node_" + r.id);
            if(data.rslt.cy && oc.children("UL").length) {
              data.inst.refresh(data.rslt.oc);
            }
          }
        }
      );        
    }else{
      $.jstree.rollback(data.rlbk);
    }
  });
})