使用 EasyUI Tree 綁定 JSON 資料時,明明節點已無子資料(children 為空陣列或 null),介面卻持續顯示展開圖示(+號),點擊後發送請求導致無限載入。本文解釋原因並給出修正方案。
EasyUI Tree 判斷節點是否為葉子節點的邏輯:
state 屬性且值為 "closed" 或 "open",視為**父節點**(非葉子),會顯示展開/摺疊圖示並啟用動態載入。state 屬性**,且 children 為空陣列或不存在,視為**葉子節點**,不顯示展開圖示。提問者的 JSON 雖然 children: [],但後端可能在序列化時仍輸出了 "state": "closed",導致前端誤判為父節點。
state 欄位。
// 葉子節點正確範例
{ "id": 5, "text": "項目五" }
// 父節點正確範例
{ "id": 1, "text": "父節點", "state": "closed", "children": [ ... ] }
id 參數,後端據此查詢子節點;無子節點時返回空陣列 [],**且不包含 state**。function formatTreeData(rows) {
return rows.map(function(node) {
if (!node.children || node.children.length === 0) {
delete node.state; // 強制移除 state
} else if (node.state === undefined) {
node.state = "closed";
}
if (node.children) node.children = formatTreeData(node.children);
return node;
});
}
$('#tree').tree({ data: formatTreeData(rawData) });
「children 為空陣列就會自動變葉子節點」——錯誤。若同時存在
state,state優先級更高。
"state" 欄位。遵循「葉子節點無 state、父節點有 state」規則,EasyUI Tree 即可正確渲染,杜絕無限展開問題。