Как я могу проверить, существует ли узел в Jstree - PullRequest
1 голос
/ 23 марта 2012

сценарий таков: у меня есть два jstree, первое дерево содержит узлы, которые мне нужны, чтобы переместить некоторые из них на второе jstree. пока мне удалось их переместить, но без правил. Но что мне нужно сделать, это: 1. чтобы только один узел был корнем всего дерева 2. проверить, существует ли узел в дереве, чтобы не допустить перемещения, но я не могу понять, как это сделать. это код второго дерева (к которому нужно перейти):

     $('#SecondTree').jstree({
            "json_data": {
                "data": data
            },
            "themes": {
                "theme": "default",
                "dots": false,
                "icons": false
            },
            "dnd": {

            },
            "crrm": {
                "move": {
                    "always_copy": "multitree"
                  }
              },

            "plugins": ["json_data", "themes", "ui", "dnd", "crrm"]

        }).bind("move_node.jstree", function (e, data) {
            if (data.rslt.r.attr("id") == data.rslt.o.attr("id")) {
                     return false;
             }


        });
    }

спасибо заранее

1 Ответ

1 голос
/ 23 марта 2012

Не уверен, что я понял весь ваш вопрос, но, в частности, я могу помочь вам с этой частью:

"[...], чтобы проверить, если узел ужесуществует в дереве, чтобы не допустить перемещения "

Вы должны использовать, как вы уже пытались, плагин crrm .Я только что ответил на довольно похожий вопрос , например, возможно, вы захотите взглянуть и на него.

В вашем случае, так как вам нужно проверитьсуществование узла (или нет) в другом дереве, вы можете сделать что-то вроде этого:

"crrm": {
   "move": {
      "check_move": function(m) { 
         return (m.ot === m.rt) || !m.rt.get_container().find("li[id="+m.o[0].id+"]").length;
      }
   }
}

Сначала мы проверяем, перемещаем ли мы узел внутри того же дерева, и всегда разрешаем этот случай (чтобы изменить порядок узловили что угодно).Измените его, если он вам не нужен.

Затем мы проверяем, существует ли узел:
m.o - это перемещаемый узел.Вы будете искать его в дереве, где вы отбрасываете узел.

m.rt.get_container() вернет структуру jQuery DOM, поэтому нам просто нужно использовать .find() и он вернет массив <li> элементы, найденные по идентификатору, являются пустыми, если ничего не найдено.

Если мы возвращаем TRUE (мы перемещаемся по одному и тому же дереву или массив пустой, то есть узел не найден ввторое дерево), движение разрешено, в противном случае оно запрещено.

Надеюсь, это поможет!

...