效果图:
代码:
<!DOCTYPE html>
<HTML>
<HEAD>
<TITLE> ZTREE DEMO - async for All</TITLE>
<meta http-equiv="content-type" content="text/html; charset=UTF-8">
<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.js"></script>
<!--<script type="text/javascript" src="../../../js/jquery.ztree.excheck.js"></script>
<script type="text/javascript" src="../../../js/jquery.ztree.exedit.js"></script>-->
<SCRIPT type="text/javascript">
<!--
var demoMsg = {
async:"正在进行异步加载,请等一会儿再点击...",
expandAllOver: "全部展开完毕",
asyncAllOver: "后台异步加载完毕",
asyncAll: "已经异步加载完毕,不再重新加载",
expandAll: "已经异步加载完毕,使用 expandAll 方法"
}
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,
onAsyncError: onAsyncError
}
};
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) {
if (curStatus != "init" && curStatus != "") {
$("#demoMsg").text((curStatus == "expand") ? demoMsg.expandAllOver : demoMsg.asyncAllOver);
asyncForAll = true;
}
curStatus = "";
}
}
function onAsyncError(event, treeId, treeNode, XMLHttpRequest, textStatus, errorThrown) {
curAsyncCount--;
if (curAsyncCount <= 0) {
curStatus = "";
if (treeNode!=null) asyncForAll = true;
}
}
var curStatus = "init", curAsyncCount = 0, asyncForAll = false,
goAsync = false;
function expandAll() {
if (!check()) {
return;
}
var zTree = $.fn.zTree.getZTreeObj("treeDemo");
if (asyncForAll) {
$("#demoMsg").text(demoMsg.expandAll);
zTree.expandAll(true);
} else {
expandNodes(zTree.getNodes());
if (!goAsync) {
$("#demoMsg").text(demoMsg.expandAll);
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 asyncAll() {
if (!check()) {
return;
}
var zTree = $.fn.zTree.getZTreeObj("treeDemo");
if (asyncForAll) {
$("#demoMsg").text(demoMsg.asyncAll);
} else {
asyncNodes(zTree.getNodes());
if (!goAsync) {
$("#demoMsg").text(demoMsg.asyncAll);
curStatus = "";
}
}
}
function asyncNodes(nodes) {
if (!nodes) return;
curStatus = "async";
var zTree = $.fn.zTree.getZTreeObj("treeDemo");
for (var i=0, l=nodes.length; i<l; i++) {
if (nodes[i].isParent && nodes[i].zAsync) {
asyncNodes(nodes[i].children);
} else {
goAsync = true;
zTree.reAsyncChildNodes(nodes[i], "refresh", true);
}
}
}
function reset() {
if (!check()) {
return;
}
asyncForAll = false;
goAsync = false;
$("#demoMsg").text("");
$.fn.zTree.init($("#treeDemo"), setting);
}
function check() {
if (curAsyncCount > 0) {
$("#demoMsg").text(demoMsg.async);
return false;
}
return true;
}
$(document).ready(function(){
$.fn.zTree.init($("#treeDemo"), setting);
$("#expandAllBtn").bind("click", expandAll);
$("#asyncAllBtn").bind("click", asyncAll);
$("#resetBtn").bind("click", reset);
});
//-->
</SCRIPT>
</HEAD>
<BODY>
<h1>异步加载模式下全部展开</h1>
<h6>[ 文件路径: super/asyncForAll.html ]</h6>
<div class="content_wrap">
<div class="zTreeDemoBackground left">
<ul id="treeDemo" class="ztree"></ul>
</div>
<div class="right">
<ul class="info">
<li class="title"><h2>实现方法说明</h2>
<ul class="list">
<li>利用 onAsyncSuccess / onAsyncError 回调函数 和 reAsyncChildNodes 或 expandNode 方法可以实现全部功能。</li>
<li class="highlight_red">如果父节点数量很大,请注意利用延时进行控制,避免异步进程过多。</li>
<li class="highlight_red">建议:演示时请利用调试工具查看 network 的 ajax 加载过程。</li>
<li>演示操作
<br/><br/>
[ <a id="expandAllBtn" href="#" onclick="return false;">全部展开</a> ]
[ <a id="asyncAllBtn" href="#" onclick="return false;">后台自动全部加载</a> ]<br/><br/>
[ <a id="resetBtn" href="#" onclick="return false;">Reset zTree</a> ]<br/><br/>
<p class="highlight_red" id="demoMsg"></p>
</li>
</ul>
</li>
</ul>
</div>
</div>
</BODY>
</HTML>