我想在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);
}
}
};
}
}
})
答案 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
答案 1 :(得分:0)
您应该使用var tree = $("#tree").jstree(true);
获取树的节点,然后对节点进行操作。
u可以使用此example。