一、代码
<SCRIPT type="text/javascript"> var projecId = {$projecId} //php传递的项目id var setting = { async: { enable: true, type: "post", url:"casesIndex.php?c=suite&f=suiteListAjax", autoParam:["id", "name=n", "level=lv"], otherParam:{"projecId":projecId}, dataFilter: filter }, data: { simpleData: { enable: true } }, callback: { onClick:GetChildNodes //点击节点之后执行的回调函数 } }; function filter(treeId, parentNode, childNodes) { if (!childNodes) return null; for (var i=0, l=childNodes.length; i<l; i++) { childNodes[i].name = childNodes[i].name.replace(/\.n/g, '.'); } return childNodes; } //回调函数定义,获取子节点 function getChildNodes(event, treeId, treeNode) { var zTree = $.fn.zTree.getZTreeObj(treeId); //console.dir(treeNode.children); /** * 后端php返回数据格式包含三个字段属性:id,name,isParent 并没有children字段属性 * [{"id":"673772","name":"\u65b0\u6848\u4f8b\u96c61","isParent":"true"},{"id":"673777","name":"\u65b0\u6848\u4f8b\u96c62","isParent":"true"}] * 所以在这里直接调用:console.dir(treeNode.children);控制台会提示错误:undefined 未定义 * 那么如何实现异步加载时,点击当前节点,获取到子节点呢?使用zTree.reAsyncChildNodes(treeNode,"refresh",false,callback回调函数),代码如下: */ zTree.reAsyncChildNodes(treeNode,"refresh",false,function () { console.dir(treeNode.children); //此时在控制的能够成功打印出指定节点的子节点 }); } $(document).ready(function(){ $.fn.zTree.init($("#modulesTree"), setting); }); </SCRIPT>
点击新案例集1节点之后,console.dir(treeNode.children)在控制台打印结果
二、reAsyncChildNodes函数官方解释:
强行异步加载父节点的子节点。[setting.async.enable = true 时有效]
已经加载过的父节点可反复使用此方法重新加载。
请通过 zTree 对象执行此方法。
reAsyncChildNodes(parentNode, reloadType, isSilent, callback)参数说明
parentNode json对象格式数据
指定需要异步加载的父节点 JSON 数据
1、parentNode = null 时,相当于从根节点 Root 进行异步加载
2、parentNode.isParent = false 时,不进行异步加载
3、请务必保证此节点数据对象 是 zTree 内部的数据对象
reloadType string类型
reloadType = "refresh" 表示清空后重新加载。
reloadType != "refresh" 时,表示追加子节点处理。
isSilent Boolean类型
设定异步加载后是否自动展开父节点。
isSilent = true 时,不展开父节点,其他值或缺省状态都自动展开。
callback reAsyncChildNodes加载执行完,回调function函数
刷新完成后的回调函数。
返回值无