我们在同时使用延迟加载功能和 open_all 功能时遇到了问题。
树的内容是使用延迟加载功能加载的。
当我们选择一个节点并单击全部展开按钮时,该节点的所有子节点将使用 jstree ajax 调用获取并使用 open_all 函数打开,当单击全部折叠按钮时,我们使用 close_all 函数。这是第一次完美运行。
但是第二次,当我们在同一个节点上单击全部展开时,递归地点击相同的 ajax url。(我们认为,每次使用 open_all 打开节点时都会点击 url)。预期的行为不是调用 url(因为数据已经加载),只应该执行 open_all 函数。
你能否澄清如何解决这个问题
//加载树的代码
$("#TreePanel").jstree({
"xml_data" : {
"ajax" : {
"url" : "/ajax/loadTree",
"type" : "post",
"data" : function(node) {
var data = {};
data.dunsNumber = ${dunsNumber};
if (node == -1) {
//set duns number to data
} else {
data.selectedNodeId = node.attr("id");
data.expandAll = isExpandAll;
}
return data;
},
"success" : function(data) {
if ($(data).attr('id') == 'error') {
$("#overlayContent").empty();
} else {
return data;
}
}
},
"xsl" : "nest"
},
"plugins" : [ "themes", "xml_data" ]
});
//code to expand all nodes
$("#ufvExpandAll").bind("click", function() {
isExpandAll= true;
$("#TreePanel").jstree("open_all", selectedNode);
isExpandAll= false;
});
//code to collapse all nodes
$("#ufvCollapseAll").bind("click", function() {
$("#TreePanel").jstree("close_all", selectedNode);
});
//code to get the node and set on a variable on clicking a node
var selectedNode;
$("#TreePanel").delegate("a", "click", function(e, data) {
var node = $(e.target).closest("li");
if (selectedNode != undefined && selectedNode != null) {
$("#" + selectedNode.id + " > a").removeClass("jstree-default- selected-node");
}
selectedNode = node[0];
$("#" + selectedNode.id + " > a").addClass("jstree-default-selected- node");
$("#ufvExpandAll").attr("disabled", false);
$("#ufvCollapseAll").attr("disabled", false);
return false;
});
提前致谢
问候哈里