項目須要用到zTree插件,zTree就不作介紹了,下面兩個鏈接是是zTree的文檔和示例php
zTree文檔:http://www.treejs.cn/v3/api.phpnode
zTree示例:http://www.treejs.cn/v3/demo.php#_101api
zTree的基本用法經過看演示及文檔基本都能掌握異步
下面記錄下項目中特別的用法async
1.異步加載時修改圖標函數
$('#rptIndTree').height($(window).height()-120); var setting = { check: { enable: true, chkStyle: "radio", radioType: "all" // chkboxType:{ "Y": "ps", "N": "ps" } }, data: { key: { name: "NAME" }, simpleData: { enable: true, idKey: "ID", pIdKey: "PID", rootPId: "0" } }, async : { enable : true, type: 'get', url : url, // Ajax 獲取數據的 URL 地址 autoParam : [], otherParam: [] }, callback : { onAsyncSuccess: zTreeOnAsyncSuccess, onClick: zTreeOnClick, onCheck: zTreeOnCheck, beforeClick: zTreeBeforeClick, beforeCheck: zTreeBeforeCheck } }; zTree = $.fn.zTree.init($("#rptIndTree"), setting, "");
上面是基本的加載zTree的代碼url
加載完後在加載成功的回調函數中處理樹節點的圖標zTreeOnAsyncSuccessspa
//加載完後執行 function zTreeOnAsyncSuccess(){ var treeObj = $.fn.zTree.getZTreeObj("rptIndTree"); var nodes = treeObj.getNodes(); for (var i=0, l=nodes.length; i < l; i++) { if('undefined' != typeof(nodes[i].children)){ nodes[i].iconOpen = '../menu1_open.png'; //父菜單打開圖標 nodes[i].iconClose = '../menu1_close.png'; //父菜單關閉圖標 treeObj.updateNode(nodes[i]); for (var k=0, _l=nodes[i].children.length; k < _l; k++) { nodes[i].children[k].icon = '../menu2_def.png'; //子菜單圖標 treeObj.updateNode(nodes[i].children[k]); } }else{ nodes[i].icon = '../menu2_def.png'; //沒有子菜單圖標 treeObj.updateNode(nodes[i]); } } }
遍歷每一個樹節點根據有無子節點來修改圖標,若是有子節點須要同時設置iconOpen和iconClose 屬性,不然改節點打開和關閉都是同一種樣式。插件
修改了節點的圖標屬性後,而後更新該節點用到如下方法:code
treeObj.updateNode(nodes[i])
在zTree文檔中能夠查找到此方法。