JSTree上下文菜单创建节点不起作用

时间:2016-04-28 09:32:28

标签: javascript jquery jstree

我想在jstree中使用上下文菜单来创建一个节点,但是当我在上下文菜单中单击Create时,没有任何反应......我收到一个错误:

  

this.create不是函数

JsTree的init如下:

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);
                    }
                }
            };
        }
    }
})

2 个答案:

答案 0 :(得分:2)

这是因为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

答案 1 :(得分:0)

您应该使用var tree = $("#tree").jstree(true);获取树的节点,然后对节点进行操作。

u可以使用此example