分享

xloadtree的一个改造

 用勿龍潛 2013-03-05

xloadtree的一个改造

修改了xloadtree的部分源码以适合自己使用。

1.修改了因节点个数过多而造成刷新时候的缓慢。(你可以用原版试试加上500个子节点,然后调用reload()方法)。

2.加入了单选和复选的功能。

3.加入了线程,在500个子节点以上才会启用。引用Thread.js,设置webFXTreeConfig.useThread=true.

4.增加了data属性,使得每个节点都可以绑定自己想绑定的数据上去。

确定线程不能保证节点的顺序,如果对顺序有要求,那就不适用了。

该例子实现了对一颗树的增删改查。

因为是延迟加载,所以在每个父节点的子节点1000以内都是比较快的。

看哈效果图:





项目jar包:

看哈部分代码treeRadio.js:

Js代码 复制代码 收藏代码
  1. webFXTreeConfig.rootIcon = "xloadtree/images/xp/folder.png";
  2. webFXTreeConfig.openRootIcon = "xloadtree/images/xp/openfolder.png";
  3. webFXTreeConfig.folderIcon = "xloadtree/images/xp/folder.png";
  4. webFXTreeConfig.openFolderIcon = "xloadtree/images/xp/openfolder.png";
  5. webFXTreeConfig.fileIcon = "xloadtree/images/xp/file.png";
  6. webFXTreeConfig.lMinusIcon = "xloadtree/images/xp/Lminus.png";
  7. webFXTreeConfig.lPlusIcon = "xloadtree/images/xp/Lplus.png";
  8. webFXTreeConfig.tMinusIcon = "xloadtree/images/xp/Tminus.png";
  9. webFXTreeConfig.tPlusIcon = "xloadtree/images/xp/Tplus.png";
  10. webFXTreeConfig.iIcon = "xloadtree/images/xp/I.png";
  11. webFXTreeConfig.lIcon = "xloadtree/images/xp/L.png";
  12. webFXTreeConfig.tIcon = "xloadtree/images/xp/T.png";
  13. webFXTreeConfig.blankIcon = "xloadtree/images/blank.png";
  14. webFXTreeConfig.type = "radio"; //checkbox or radio
  15. var prjPath = '/xloadtreeDemo';
  16. var actionSuffix = '.action';
  17. var namespace = '/Controller';
  18. var loadRootNodeAction = 'loadRootNode_XloadTree';
  19. var initAction = 'init_XloadTree';
  20. var addNodeAction = 'addNode_XloadTree';
  21. var saveOrUpdateRootNodeAction = 'saveOrUpdateRootNode_XloadTree';
  22. var deleteNodeAction = 'deleteNode_XloadTree';
  23. var loadChildNodeAction = 'loadChildNode_XloadTree';
  24. var updateNodeAction = 'updateNode_XloadTree';
  25. var loadTreeUrl = prjPath + namespace+'/' + loadRootNodeAction + actionSuffix;
  26. var loadChildNodeUrl = prjPath + namespace+'/' + loadChildNodeAction + actionSuffix;
  27. var initTreeUrl = prjPath + namespace+'/' + initAction + actionSuffix;
  28. var addNodeUrl = prjPath + namespace+'/' + addNodeAction + actionSuffix;
  29. var saveOrUpdateRootNodeUrl = prjPath + namespace+'/' + saveOrUpdateRootNodeAction + actionSuffix;
  30. var deleteNodeUrl = prjPath + namespace+'/' + deleteNodeAction + actionSuffix;
  31. var updateNodeUrl = prjPath + namespace+'/' + updateNodeAction + actionSuffix;
  32. var tree;
  33. $(function(){
  34. loadTree();
  35. });
  36. //加载根节点
  37. function loadTree(){
  38. $.ajax({
  39. url:loadTreeUrl,
  40. dataType:'json',
  41. success:function(rootNode){
  42. var id = rootNode.id;
  43. if(id != '0'){
  44. updateTree(rootNode);
  45. }else{
  46. $('#rootId').html('null');
  47. $('#rootPid').html('null');
  48. }
  49. }
  50. });
  51. }
  52. //获取根节点的子节点集合
  53. function updateTree(rootNode){
  54. $('#rootText').val(rootNode.text);
  55. $('#rootAction').val(rootNode.action);
  56. $('#rootId').html(rootNode.id);
  57. $('#rootPid').html('null');
  58. tree = new WebFXLoadTree(rootNode.text,initTreeUrl,rootNode.action);
  59. tree.data = rootNode;
  60. $('#radioDiv').html(tree.toString());
  61. }
  62. //点击单选按钮的回调事件
  63. function setRadioData(data){
  64. if(typeof(data) == 'string'){
  65. data = jQuery.parseJSON(data);
  66. }
  67. $('#pid').val(data.id);
  68. }
  69. //添加新节点
  70. function addNode(){
  71. var selectNode = tree.selectNode;
  72. if(selectNode==null){
  73. alert('选中一个节点进行新增操作!');
  74. return;
  75. }
  76. var treeNode = new Object();
  77. treeNode.text = $("#text").val();
  78. treeNode.action = $("#action").val();
  79. treeNode.pid = $("#pid").val();
  80. if(treeNode.text==''){
  81. alert('text必须填写!');
  82. return;
  83. }
  84. $.ajax({
  85. type:'POST',
  86. url:addNodeUrl,
  87. data:treeNode,
  88. dataType:'json',
  89. success:function(newNode){
  90. //直接添加即可
  91. selectNode.add(new WebFXTreeItem({
  92. text:newNode.text,
  93. action:newNode.action,
  94. data:newNode
  95. }));
  96. selectNode.src = newNode.src;
  97. selectNode.expand();
  98. //清空内容
  99. $("#text").val('');
  100. $("#action").val('');
  101. }
  102. });
  103. }
  104. //保存根节点信息
  105. function saveOrUpdateRootNode(){
  106. var treeNode = new Object();
  107. treeNode.text = $("#rootText").val();
  108. treeNode.action = $("#rootAction").val();
  109. treeNode.id = $("#rootId").html();
  110. if(treeNode.text==''){
  111. alert('text不能为空');
  112. $("#rootText").focus();
  113. return;
  114. }
  115. if(treeNode.id == 'null')treeNode.id = -1;
  116. $.ajax({
  117. type:'POST',
  118. url:saveOrUpdateRootNodeUrl,
  119. data:treeNode,
  120. dataType:'json',
  121. success:function(rootNode){
  122. $("#"+tree.id+"-anchor").html(rootNode.text);
  123. }
  124. });
  125. }
  126. //刷新选中节点的子节点信息
  127. function flushNode(){
  128. var selectNode = tree.selectNode;
  129. if(selectNode==null){
  130. alert('选中一个节点进行刷新操作!');
  131. return;
  132. }
  133. if(selectNode.childNodes.length!=0){
  134. if(selectNode.reload){
  135. selectNode.reload();
  136. }else{
  137. var parentNode = selectNode.parentNode;
  138. var index = selectNode.index;
  139. if(parentNode){
  140. parentNode.reload();
  141. }
  142. }
  143. }
  144. }
  145. //删除节点
  146. function delNode(){
  147. var selectNode = tree.selectNode;
  148. if(selectNode==null){
  149. alert('选中一个节点进行删除操作!');
  150. return;
  151. }
  152. var data = selectNode.data;
  153. if(typeof(data) == 'string'){
  154. data = jQuery.parseJSON(data);
  155. }
  156. $.ajax({
  157. type:'POST',
  158. url:deleteNodeUrl,
  159. data:{id:data.id},
  160. success:function(result){
  161. if(Number(result)!=0){
  162. selectNode.remove();
  163. tree.selectNode = null;
  164. }
  165. }
  166. });
  167. }
  168. //编辑节点信息
  169. function editNode(){
  170. var selectNode = tree.selectNode;
  171. if(selectNode==null){
  172. alert('选中一个节点进行编辑操作!');
  173. return;
  174. }
  175. var data = selectNode.data;
  176. if(typeof(data) == 'string'){
  177. data = jQuery.parseJSON(data);
  178. }
  179. var treeNode = new Object();
  180. treeNode.text = $("#text").val();
  181. treeNode.action = $("#action").val();
  182. treeNode.id = data.id;
  183. if(treeNode.text==''){
  184. alert('text不能为空');
  185. $("#text").focus();
  186. return;
  187. }
  188. $.ajax({
  189. type:'POST',
  190. url:updateNodeUrl,
  191. data:treeNode,
  192. dataType:'json',
  193. success:function(updateNode){
  194. $("#"+selectNode.id+"-anchor").html(updateNode.text);
  195. $("#"+selectNode.id+"-anchor").attr('href',updateNode.action);
  196. selectNode.data = updateNode;
  197. }
  198. });
  199. }



xloadtreeDemo.rar 附带mysql脚本数据。

  • 大小: 11 KB
  • 大小: 11.3 KB
  • 大小: 36.3 KB

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约