JSTREE, точная позиция перемещения - PullRequest
0 голосов
/ 17 февраля 2011

Я хочу показать явную подсказку при перетаскивании узла дерева внутри дерева.

пример: «Узел 1 будет перемещен до / после / внутри Узла 2»

Из аргумента обратного вызова move_node мы можем получить позицию («до / после / внутри»), но не из обратного вызова check_move (ни из prepare_move). Подсказка должна отображаться при перетаскивании, поэтому move_node слишком поздно.

Та же проблема при перетаскивании внешнего объекта в древовидную структуру, обратный вызов drag_check из плагина dnd не имеет информации о позиции (мы просто знаем целевой узел, но не знаем, находится ли он до, после или внутри). В этом случае, даже для обратного вызова drag_finish у нас нет информации.

Кто-нибудь может помочь мне решить эту проблему?

Ответы [ 2 ]

1 голос
/ 20 февраля 2011

Я только что проверил это, и он работает нормально для меня на 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

0 голосов
/ 05 июля 2011

Вот что я использую для этого с плагином 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);
    }
  });
})
...