Проблема контекстного меню jsTree - PullRequest
3 голосов
/ 04 июня 2011

Это должен быть действительно простой вопрос, но я не могу найти ответ нигде. Я недавно (как и сегодня) начал использовать jsTree, и я только что установил свое первое дерево. Я создал неупорядоченный список только статического текста:

<ul>
  <li>one</li>
  <li>two</li>
  <li>three</li>
</ul>

Мой код для создания jsTree выглядит так:

$(document).ready(function () {
        $("#demo1").bind("select_node.jstree",
                function(event, data) {
                    //DO SOMETHING WHEN A NODE IS CLICKED
                }).jstree();
});

Затем я пытаюсь добавить контекстное меню. Используя следующее:

$(document).ready(function () {
        $("#demo1").bind("select_node.jstree",
                function(event, data) {
                    //DO SOMETHING WHEN A NODE IS CLICKED
                }).jstree({plugins: ["contextmenu"], contextmenu: {items: customMenu}});
    });

customMenu - это простая функция, которая возвращает объект.

Когда я выполняю первый код, я получаю jsTree, и он сворачивается и расширяется. Когда я выполняю второй, область, где находится jsTree, говорит: «Загрузка ...» и это все. Если я щелкну правой кнопкой мыши на этом слове, я действительно получу меню.

Есть предложения?

если, когда я указываю на функцию customMenu, я добавляю () , то я получаю действительно странное меню, которое имеет: -Создайте -rename -удалять -редактировать --резать --copy --вставить --Добавить группу --delete

Я не уверен, что знаю, что происходит. Я изменил имя функции на что-то другое, чтобы быть уверенным, что я не получаю функцию jQuery или jsTree, но все равно получаю странное поведение. Есть предложения?

Ответы [ 2 ]

2 голосов
/ 20 сентября 2011

Было бы предложено не обрабатывать создание контекстного меню самостоятельно, а позволить jstree сделать это за вас.

поэтому в коде инициализации вы должны написать:

$("#demo1").jstree(
{ 
    "plugins" : [ "contextmenu" ]
}

и этого было бы достаточно, чтобы иметь функциональное контекстное меню.

1 голос
/ 06 июня 2013

не привязывайте метод выбора к jstree. Вместо этого создайте новые пункты меню, как показано в коде ниже. Это должно работать нормально.

$("#demo1").jstree(
{ 
     "contextmenu":{
         items:{
              "LogicalNameForMenuItem":{
                     label: "DisplayNameForMenuItem",
                     action: function (node) {
                          <--Your code to handle the function goes here-->
                     } 
               }
          }
      },

      "plugins" : [ "contextmenu","crrm","ui" ]

});

Это должно работать.

А если вы хотите удалить элементы меню по умолчанию, установите для них значение false

"contextmenu":{
         items:{
            create:false,
            remove:false,
            ccp:false
         }
}
...