2
當一起使用lazyloading特性和open_all特性時,我們遇到問題。Jstree加載並展開所有問題
樹的內容使用延遲加載功能加載。
當我們選擇一個節點並單擊展開所有按鈕時,將使用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;
});
在此先感謝
問候 哈日