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>


  • 4
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值