2016-04-28 4 views
2

Я хочу использовать контекстное меню в jstree для создания узла, но когда я нажимаю на Create в контекстном меню, ничего не происходит .... Я получаю сообщение об ошибке:JSTree Контекстное меню Создать узел не работает

this.create is not a function

INIT JsTree заключается в следующем:

var $ = jQuery; 
var baseUrl = [location.protocol, '//', location.host, location.pathname].join(''); 
var ajaxUrl = baseUrl + "?action=load"; 

$("#tree").jstree({ 
    'core': { 
     'data': { 
      "url": ajaxUrl, 
      "dataType": "json" 
     } 
    }, 

    "plugins": ["themes", "contextmenu", "search"], 
    'contextmenu': { 
     'items': function($node) { 
      return { 
       'Create': { 
        "separator_before": false, 
        "separator_after": false, 
        "label": "Create", 
        "action": function(obj) { 
         $node = this.create($node); 
        } 
       }, 

       'Rename': { 
        "separator_before": false, 
        "separator_after": false, 
        "label": "Rename", 
        "action": function(obj) { 
         this.edit($node); 
        } 

       }, 

       "Remove": { 
        "separator_before": false, 
        "separator_after": false, 
        "label": "Remove", 
        "action": function(obj) { 
         this.delete_node($node); 
        } 
       } 
      }; 
     } 
    } 
}) 

ответ

1

Это происходит потому, что this относится к window сущности, не jstree.

подход, который работал для меня:

createItem: { 
      label: "Create", 
      action: function (data) { 
       var inst = $.jstree.reference(data.reference), 
        obj = inst.get_node(data.reference); 
       inst.create_node(obj, {}, "last", function (new_node) { 
        new_node.data = {file: true}; 
        setTimeout(function() { inst.edit(new_node); },0); 
       }); 
      } 
     } 

Кроме того, вам нужно установить check_callback так:

'core': { 
     'check_callback': true, 

Взятые из here

Full fiddle

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