2013-09-13 6 views
2

Ошибка javascript, указывающая, что this.rename (obj) не определяется при выборе для переименования узла.Ошибка контекстного меню JsTree

JavaScript ошибка во время выполнения: Объект не поддерживает свойство или метод «переименовать»

$(document).ready(function() { 
     $('#marketing-category-tree').jstree({ 
      themes: { 
       theme: "default", 
       dots: true, 
       icons: true 
      }, 
      contextmenu: { 
       items: { 
        "rename" : { 
         "label": "Rename", 
         "action": function (obj) { this.rename(obj); } 
        } 
       } 
      }, 
      plugins: ["themes", "html_data", "ui", "crrm", "contextmenu"] 
     }) 
     .bind("rename.jstree", function (e, data) { 
      debugger; 
      alert("RENAMING!!!"); 
     }); 
}); 

Я также попытался следующий код, и я в состоянии выбрать и сделать переименования, но не может захватить событие изменения.

$('#marketing-category-tree').jstree({ 
    themes: { 
     theme: "default", 
     dots: true, 
     icons: true 
    }, 
    plugins: ["themes", "html_data", "ui", "crrm", "contextmenu"] 
}) 
.bind("rename.jstree", function (e, data) { 
    alert("RENAMING!!!"); 
}); 
+2

Мне удалось получить элементы меню по умолчанию (т. Е. Создать, удалить, переименовать), изменив параметр привязки с «rename.jstree» на «rename_node.jstree». Этот материал плохо документирован, как предложил Дарин Димитров. Однако при попытке настроить использование документированных примеров функция по умолчанию «this.rename» не распознается. – user2379092

+0

Я прошел через документацию и несколько blogposts, а также сообщения здесь, но не мог понять это. Я продолжаю получать то же самое поведение: «this.rename не является функцией» при попытке перезаписать существующие. Я не мог найти способ избавиться от неиспользуемых записей в контекстном меню (мне нужно только переименовать и удалить). – Select0r

ответ

3

Я думаю, что метод, который вы ищете, является edit. Но сначала вы должны получить узел дерева. Попробуйте использовать этот код ниже:

... 
"contextmenu" : { 
    "items" : renameItem : { // The "rename" menu item 
       label : "Rename", 
       action : function (obj) { 
       n = $('#marketing-category-tree').jstree(true).get_node(obj.reference); //get node 
       $('#marketing-category-tree').jstree(true).edit(n); //puts the node into edit mode 
       } 
      } 
    } 
... 

HTH

+0

Так что, помещая элемент в «edit» -mode, вызывается функция rename_node после завершения переименования? Почему мне нужно вызвать «$ ('# jstree'). Jstree (true) .edit (node);" и это." не будет работать здесь? (this.rename найдено в каждом учебнике для этого, но просто не работает) Мне удалось получить «переименование» для работы с вашим кодом (BTW: есть «{« missing after »items»: «). – Select0r

+0

Я нашел «delete_node» как функцию, чтобы заставить это работать, чтобы удалить элемент. Все еще путают здесь. Почему мне нужно использовать «edit», который переводит на «.on ('rename_node.jstree', function (e, data) {" и почему "delete_node" (пересылка на "$ ('# jstree'). Jstree (true) .delete_node (node); ") работать, а не просто« удалять »? Я думаю, что большая часть путаницы здесь возникает из-за отсутствия согласованности в названии методов. – Select0r

+0

Где вы нашли, что он должен работать с этим. delete? Я рекомендую придерживаться описания jsTree API: http://www.jstree.com/api/#. – oerl

0

Ваш первый пример кода не сработает, потому что

"action": function (obj) { this.rename(obj); } 

в этом случае «это» точка для объекта Window следующая вещь заключается в том, что документация http://www.jstree.com/api/ не имеет упоминаний о методе переименовать и только rename_node

Вот рабочий пример (щелкните правой кнопкой мыши на любом узле, а затем нажмите на переименовании)

http://jsfiddle.net/w9snc6z1/4/

Обратите внимание, что rename_node тоже не работает, но в соответствии с documentation

set_text: set the text value of a node. Used internally, please use rename_node(obj, val).

не рекомендуется использовать set_text вместо rename_node.

+0

Итак, код работает, но не должен использоваться ... :) Мне удалось создать код в моем проекте, но теперь пользователь не может вводить новое имя, что и делает оригинальный метод (и что «редактировать» следует использовать для обозначения OERL). – Select0r

Смежные вопросы