asyncForAll.html 5.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192
  1. <!DOCTYPE html>
  2. <HTML>
  3. <HEAD>
  4. <TITLE> ZTREE DEMO - async for All</TITLE>
  5. <meta http-equiv="content-type" content="text/html; charset=UTF-8">
  6. <link rel="stylesheet" href="../../../css/demo.css" type="text/css">
  7. <link rel="stylesheet" href="../../../css/zTreeStyle/zTreeStyle.css" type="text/css">
  8. <script type="text/javascript" src="../../../js/jquery.min.js"></script>
  9. <!-- <script type="text/javascript" src="../../../js/jquery-1.4.4.min.js"></script>-->
  10. <script type="text/javascript" src="../../../js/jquery.ztree.core.js"></script>
  11. <!--<script type="text/javascript" src="../../../js/jquery.ztree.excheck.js"></script>
  12. <script type="text/javascript" src="../../../js/jquery.ztree.exedit.js"></script>-->
  13. <SCRIPT type="text/javascript">
  14. <!--
  15. var demoMsg = {
  16. async:"正在进行异步加载,请等一会儿再点击...",
  17. expandAllOver: "全部展开完毕",
  18. asyncAllOver: "后台异步加载完毕",
  19. asyncAll: "已经异步加载完毕,不再重新加载",
  20. expandAll: "已经异步加载完毕,使用 expandAll 方法"
  21. }
  22. var setting = {
  23. async: {
  24. enable: true,
  25. url:"../asyncData/getNodes.php",
  26. autoParam:["id", "name=n", "level=lv"],
  27. otherParam:{"otherParam":"zTreeAsyncTest"},
  28. dataFilter: filter,
  29. type: "get"
  30. },
  31. callback: {
  32. beforeAsync: beforeAsync,
  33. onAsyncSuccess: onAsyncSuccess,
  34. onAsyncError: onAsyncError
  35. }
  36. };
  37. function filter(treeId, parentNode, childNodes) {
  38. if (!childNodes) return null;
  39. for (var i=0, l=childNodes.length; i<l; i++) {
  40. childNodes[i].name = childNodes[i].name.replace(/\.n/g, '.');
  41. }
  42. return childNodes;
  43. }
  44. function beforeAsync() {
  45. curAsyncCount++;
  46. }
  47. function onAsyncSuccess(event, treeId, treeNode, msg) {
  48. curAsyncCount--;
  49. if (curStatus == "expand") {
  50. expandNodes(treeNode.children);
  51. } else if (curStatus == "async") {
  52. asyncNodes(treeNode.children);
  53. }
  54. if (curAsyncCount <= 0) {
  55. if (curStatus != "init" && curStatus != "") {
  56. $("#demoMsg").text((curStatus == "expand") ? demoMsg.expandAllOver : demoMsg.asyncAllOver);
  57. asyncForAll = true;
  58. }
  59. curStatus = "";
  60. }
  61. }
  62. function onAsyncError(event, treeId, treeNode, XMLHttpRequest, textStatus, errorThrown) {
  63. curAsyncCount--;
  64. if (curAsyncCount <= 0) {
  65. curStatus = "";
  66. if (treeNode!=null) asyncForAll = true;
  67. }
  68. }
  69. var curStatus = "init", curAsyncCount = 0, asyncForAll = false,
  70. goAsync = false;
  71. function expandAll() {
  72. if (!check()) {
  73. return;
  74. }
  75. var zTree = $.fn.zTree.getZTreeObj("treeDemo");
  76. if (asyncForAll) {
  77. $("#demoMsg").text(demoMsg.expandAll);
  78. zTree.expandAll(true);
  79. } else {
  80. expandNodes(zTree.getNodes());
  81. if (!goAsync) {
  82. $("#demoMsg").text(demoMsg.expandAll);
  83. curStatus = "";
  84. }
  85. }
  86. }
  87. function expandNodes(nodes) {
  88. if (!nodes) return;
  89. curStatus = "expand";
  90. var zTree = $.fn.zTree.getZTreeObj("treeDemo");
  91. for (var i=0, l=nodes.length; i<l; i++) {
  92. zTree.expandNode(nodes[i], true, false, false);
  93. if (nodes[i].isParent && nodes[i].zAsync) {
  94. expandNodes(nodes[i].children);
  95. } else {
  96. goAsync = true;
  97. }
  98. }
  99. }
  100. function asyncAll() {
  101. if (!check()) {
  102. return;
  103. }
  104. var zTree = $.fn.zTree.getZTreeObj("treeDemo");
  105. if (asyncForAll) {
  106. $("#demoMsg").text(demoMsg.asyncAll);
  107. } else {
  108. asyncNodes(zTree.getNodes());
  109. if (!goAsync) {
  110. $("#demoMsg").text(demoMsg.asyncAll);
  111. curStatus = "";
  112. }
  113. }
  114. }
  115. function asyncNodes(nodes) {
  116. if (!nodes) return;
  117. curStatus = "async";
  118. var zTree = $.fn.zTree.getZTreeObj("treeDemo");
  119. for (var i=0, l=nodes.length; i<l; i++) {
  120. if (nodes[i].isParent && nodes[i].zAsync) {
  121. asyncNodes(nodes[i].children);
  122. } else {
  123. goAsync = true;
  124. zTree.reAsyncChildNodes(nodes[i], "refresh", true);
  125. }
  126. }
  127. }
  128. function reset() {
  129. if (!check()) {
  130. return;
  131. }
  132. asyncForAll = false;
  133. goAsync = false;
  134. $("#demoMsg").text("");
  135. $.fn.zTree.init($("#treeDemo"), setting);
  136. }
  137. function check() {
  138. if (curAsyncCount > 0) {
  139. $("#demoMsg").text(demoMsg.async);
  140. return false;
  141. }
  142. return true;
  143. }
  144. $(document).ready(function(){
  145. $.fn.zTree.init($("#treeDemo"), setting);
  146. $("#expandAllBtn").bind("click", expandAll);
  147. $("#asyncAllBtn").bind("click", asyncAll);
  148. $("#resetBtn").bind("click", reset);
  149. });
  150. //-->
  151. </SCRIPT>
  152. </HEAD>
  153. <BODY>
  154. <h1>异步加载模式下全部展开</h1>
  155. <h6>[ 文件路径: super/asyncForAll.html ]</h6>
  156. <div class="content_wrap">
  157. <div class="zTreeDemoBackground left">
  158. <ul id="treeDemo" class="ztree"></ul>
  159. </div>
  160. <div class="right">
  161. <ul class="info">
  162. <li class="title"><h2>实现方法说明</h2>
  163. <ul class="list">
  164. <li>利用 onAsyncSuccess / onAsyncError 回调函数 和 reAsyncChildNodes 或 expandNode 方法可以实现全部功能。</li>
  165. <li class="highlight_red">如果父节点数量很大,请注意利用延时进行控制,避免异步进程过多。</li>
  166. <li class="highlight_red">建议:演示时请利用调试工具查看 network 的 ajax 加载过程。</li>
  167. <li>演示操作
  168. <br/><br/>
  169. [ <a id="expandAllBtn" href="#" onclick="return false;">全部展开</a> ] &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
  170. [ <a id="asyncAllBtn" href="#" onclick="return false;">后台自动全部加载</a> ]<br/><br/>
  171. [ <a id="resetBtn" href="#" onclick="return false;">Reset zTree</a> ]<br/><br/>
  172. <p class="highlight_red" id="demoMsg"></p>
  173. </li>
  174. </ul>
  175. </li>
  176. </ul>
  177. </div>
  178. </div>
  179. </BODY>
  180. </HTML>