我使用 ajax 作为我的数据源,您可以从下面的代码中看到。但是,我还需要以编程方式将节点插入树中。当我这样做时,jsTree 在创建节点后进行 ajax 回调。有没有办法根据节点属性来抑制这种情况?在我的特定情况下,我有在 CORBA 名称服务中列出的节点和未列出的节点。CORBA 名称服务中的那些运行良好,并且可以通过 AJAX 获得。我想将属性为“ns”=“none”的任意节点插入树中,而不是让它进行 ajax 调用。这是我的代码:
function renderJsonTree() {
$("#JsonTree").jstree({
"plugins" : [ "json_data", "types", "themes", "ui", "cookies" ],
"ui" : {"select_limit" : 1},
"json_data" : {
"ajax" :
{
"url":"lookup",
"data":function(n) {
return {"server":n.attr?n.attr('data-ns'):'',
"longName":n.attr?n.attr('data-longname'):'',"isObj":n.attr?n.attr('data-isObj'):'n'};
}
}
},
"types": {
"valid_children" : [ "nameServer" ],
"types" : {
"nameServer": {
"icon": {"image":"/corba_browser/static/images/drive.png"},
"valid_children" : [ "default" ],
},
"global": {
"icon": {"image":"/corba_browser/static/images/globe.png"},
"valid_children" : [ "default" ]
},
"object": {
"icon": {"image":"/corba_browser/static/images/alien.png"},
"valid_children" : [ "default" ]
},
"default" : {"valid_children" : [ "default" ]}
}
}
}).bind("loaded.jstree", function (event, data) {
jQuery("li").css('line-height', "15pt");
jQuery("li").css('font-size', "12pt");
}).bind("open_node.jstree close_node.jstree", function (e,data) {
jQuery("li").css('line-height', "15pt");
jQuery("li").css('font-size', "12pt");
var currentNode = data.args[0];
if(e.type === "close_node") {
currentNode.addClass("to-be-refreshed");
}
if(e.type === "open_node") {
if (currentNode.attr('ns')!='none') {
if (currentNode.hasClass("to-be-refreshed")) {
var tree = $.jstree._reference("#JsonTree");
tree.refresh(currentNode);
}
}
}
});
};