當 DynamicLoadChildNodes=true 時,控件輸出支援客戶端動態載入的基礎設施代碼:
<xml id='SkyTreeViewControlTempXML' onreadystatechange='SkyTreeViewControlDynamicLoadChildNodes()'></xml>
var SkyTreeViewControlDynamicRootNodeID;
function SkyTreeViewControlDynamicLoadChildNodes() {
var xml = document.getElementById('SkyTreeViewControlTempXML');
if (!xml || xml.readyState != 'complete') return;
var rootNode = document.getElementById(SkyTreeViewControlDynamicRootNodeID + '_text');
if (!rootNode) return;
var xsl = document.getElementById('SkyTreeViewControlXSLT');
var html = '', errorFlag = false;
// 錯誤檢查:XSLT 缺失、XML 解析錯誤、無根節點
if (!xsl) { html = '缺失XSLT資料'; errorFlag = true; }
else if (xml.XMLDocument.parseError.errorCode != 0) {
html = '錯誤:' + xml.XMLDocument.parseError.reason + '[' + xml.XMLDocument.parseError.url + ']';
errorFlag = true;
}
else if (!xml.XMLDocument.documentElement) {
html = '未找到根節點'; errorFlag = true;
}
else {
// 將 RootID 寫入 XML 文件根元素,供 XSLT 使用
xml.XMLDocument.documentElement.setAttribute('RootID', SkyTreeViewControlDynamicRootNodeID);
html = xml.XMLDocument.transformNode(xsl.XMLDocument);
}
// 移除載入提示,插入生成的 HTML
var lbl = document.getElementById(SkyTreeViewControlDynamicRootNodeID + '_Loading');
if (lbl) {
if (errorFlag) { lbl.innerHTML = '<br/>' + html; return; }
lbl.insertAdjacentHTML('afterEnd', html);
lbl.parentNode.removeChild(lbl);
} else {
rootNode.insertAdjacentHTML('afterEnd', html);
}
// 更新父節點圖示為展開狀態
var expend = document.getElementById(SkyTreeViewControlDynamicRootNodeID + '_expend');
var icon = document.getElementById(SkyTreeViewControlDynamicRootNodeID + '_icon');
var text = document.getElementById(SkyTreeViewControlDynamicRootNodeID + '_text');
var table = document.getElementById(SkyTreeViewControlDynamicRootNodeID + '_table');
if (expend && icon && text && table) {
// 交換 src 與 SrcBack 實現圖示切換
var srcBack = icon.src; icon.src = icon.getAttribute('SrcBack'); icon.setAttribute('SrcBack', srcBack);
srcBack = expend.src; expend.src = expend.getAttribute('SrcBack'); expend.setAttribute('SrcBack', srcBack);
}
SkyTreeViewControlDynamicRootNodeID = null;
}
_Loading 標籤顯示「正在載入」動畫,載入完成後自動移除。insertAdjacentHTML 高效插入 DOM,並清理暫存變數。此腳本為控件「按需載入」特性提供了健壯的客戶端支撐。