當使用者展開節點觸發動態載入時,客戶端腳本將節點的 XMLSource 寫入暫存 XML 資料島 SkyTreeViewControlTempXML 的 src 屬性。IE 瀏覽器即刻啟動非同步 XML 載入,並在 onreadystatechange 事件中多次呼叫 SkyTreeViewControlDynamicLoadChildNodes 函數。
readyState == 'complete',否則返回等待下次觸發。SkyTreeViewControlXSLT。transformNode(xsl.XMLDocument) 執行 XSLT 轉換,產生子節點 HTML 字串。insertAdjacentHTML 將 HTML 插入頁面對應位置。控件透過 RegisterStartupScript 輸出共享的 XSLT 模板與初始化函數:
<xml id='SkyTreeViewControlXSLT'>{XSLT內容}</xml>
<script language=JavaScript>
function RefreshSkyTreeViewControl(id) {
var xml = document.getElementById(id + '_xml');
var xsl = document.getElementById('SkyTreeViewControlXSLT');
var container = document.getElementById(id + '_container');
if (!container) { alert('未找到目標'); return; }
if (!xml) { container.innerText = '缺失XML資料'; return; }
if (!xsl) { container.innerText = '缺失XSLT資料'; return; }
var html = xml.XMLDocument.transformNode(xsl.XMLDocument);
container.innerHTML = html;
}
</script>
此設計將 XSLT 模板內嵌於頁面,避免額外請求;transformNode 為 IE 原生方法,執行效率遠高於 JavaScript 字串拼接,是客戶端渲染高效能的關鍵。