zTree异步加载并初始化树时全部展开

最近在做角色管理的功能,即用zTree的方式展示菜单权限树,然后,指定角色绑定相关的权限。

觉得zTree挺牛逼的,就尝试用了,但是,发现在做修改的时候,我们想在树加载的时候就一下子全部都展开,本以为,这次异步废了,还是得搞成非异步的。没想到强大的API上就给出了类似的场景,而且做得很好,采用了递归,不过,还是有个问题需要注意:

就是DEOM上给的是先加载并不展开,而是再在点击后全部展开, 这样没问题,如果,把函数直接放在加载的时候就展开,就出现问题了,DEMO上有一句话,是:如果父节点数量很大,请注意利用延时进行控制,避免异步进程过多。因此需要用延迟加载的方式控制。

<link rel="stylesheet" href="../../../css/demo.css" type="text/css">  
    <link rel="stylesheet" href="../../../css/zTreeStyle/zTreeStyle.css" type="text/css">  
    <script type="text/javascript" src="../../../js/jquery-1.4.4.min.js"></script>  
    <script type="text/javascript" src="../../../js/jquery.ztree.core-3.5.js"></script>  
    <!--<script type="text/javascript" src="../../../js/jquery.ztree.excheck-3.5.js"></script>  
    <script type="text/javascript" src="../../../js/jquery.ztree.exedit-3.5.js"></script>-->  
    <SCRIPT type="text/javascript">  
        var setting = {  
            async: {  
                enable: true,  
                url:"../asyncData/getNodes.php",  
                autoParam:["id", "name=n", "level=lv"],  
                otherParam:{"otherParam":"zTreeAsyncTest"},  
                dataFilter: filter,  
                type: "get"  
            },  
            callback: {  
                beforeAsync: beforeAsync,  
                onAsyncSuccess: onAsyncSuccess  
            }  
        };  

        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 beforeAsync() {  
            curAsyncCount++;  
        }  

        function onAsyncSuccess(event, treeId, treeNode, msg) {  
            curAsyncCount--;  
            if (curStatus == "expand") {  
                expandNodes(treeNode.children);  
            } else if (curStatus == "async") {  
                asyncNodes(treeNode.children);  
            }  

            if (curAsyncCount <= 0) {  
                curStatus = "";  
            }  
        }  

        var curStatus = "init", curAsyncCount = 0, goAsync = false;  
        function expandAll() {  
            if (!check()) {  
                return;  
            }  
            var zTree = $.fn.zTree.getZTreeObj("treeDemo");  
            expandNodes(zTree.getNodes());  
            if (!goAsync) {  
                curStatus = "";  
            }  
        }  
        function expandNodes(nodes) {  
            if (!nodes) return;  
            curStatus = "expand";  
            var zTree = $.fn.zTree.getZTreeObj("treeDemo");  
            for (var i=0, l=nodes.length; i<l; i++) {  
                zTree.expandNode(nodes[i], true, false, false);//展开节点就会调用后台查询子节点  
                if (nodes[i].isParent && nodes[i].zAsync) {  
                    expandNodes(nodes[i].children);//递归  
                } else {  
                    goAsync = true;  
                }  
            }  
        }  

        function check() {  
            if (curAsyncCount > 0) {  
                return false;  
            }  
            return true;  
        }  

        $(document).ready(function(){  
            $.fn.zTree.init($("#treeDemo"), setting);  
            setTimeout(function(){  
                expandAll("treeDemo");  
            },1000);//延迟加载  
        });  

    </SCRIPT>  
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值