最新消息: 新版网站上线了!!!

ztree3.5异步加载 点击当前节点treeNode.children无法取到子节点解决

一、代码

            <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>

image.png

点击新案例集1节点之后,console.dir(treeNode.children)在控制台打印结果

image.png

二、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函数

刷新完成后的回调函数。

返回值无


.....

转载请注明:谷谷点程序 » ztree3.5异步加载 点击当前节点treeNode.children无法取到子节点解决