【问题标题】:JSTREE, exact move positionJSTREE,准确的移动位置
【发布时间】:2011-02-17 10:44:02
【问题描述】:

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

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

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

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

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

【问题讨论】:

    标签: drag-and-drop jstree


    【解决方案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

    【讨论】:

    • 感谢您的回答。我检查了你所说的,但每次显示箭头时(意味着选择了放置目标),它们是对 3 个位置的 prepare_move 的 3 次调用。这是将一个节点拖到另一个节点时的输出: o : item_1 r : item_2 p : before o : item_1 r : item_2 p : after o : item_1 r : item_2 p : inside 因此,我无法定义哪个是正确的位置。你明白我的意思吗?你能重现这个吗(我也使用了最新版本的 jstree)。提前致谢。
    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 2012-09-11
      • 2013-08-03
      • 1970-01-01
      • 1970-01-01
      • 2011-10-11
      • 2020-06-19
      • 2016-10-19
      • 1970-01-01
      • 2012-03-12
      相关资源
      最近更新 更多