2011-02-17 59 views
0

我想显示一个明确的工具提示,同时在treeview中拖放树节点。JSTREE,确切的移动位置

例如:“节点1将移动前/后/内节点2”

从move_node回调参数,我们可以得到的位置(“前/后/内”),但不从check_move回调(既不from prepare_move)。 拖动时应显示工具提示,因此move_node太迟。

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

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

回答

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

这就是我使用JSTree v1.0RC2

+0

感谢您的回答。我检查了你说的话,但每次显示箭头(表示选择放置目标)时,它们都是3次调用prepare_move以及3个全部位置。 这是拖动一个节点到另一个时的输出: ○:ITEM_1 R:ITEM_2 号码:前 ○:ITEM_1 R:ITEM_2 号码:后 ○:ITEM_1 R:ITEM_2 号码:内部 因此,我无法确定哪个是正确的位置。 你明白我的意思吗?你能重现这个(我也使用jstree的最后一个版本)。 在此先感谢。 – Cedric 2011-02-21 08:37:52

0

记录在这里

o : item_3 
r : item_2 
p : inside 

我用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); 
    } 
    }); 
})