1.修改了因節(jié)點(diǎn)個數(shù)過多而造成刷新時候的緩慢。(你可以用原版試試加上500個子節(jié)點(diǎn),然后調(diào)用reload()方法)。
2.加入了單選和復(fù)選的功能。
3.加入了線程,在500個子節(jié)點(diǎn)以上才會啟用。引用Thread.js,設(shè)置webFXTreeConfig.useThread=true.
4.增加了data屬性,使得每個節(jié)點(diǎn)都可以綁定自己想綁定的數(shù)據(jù)上去。
確定線程不能保證節(jié)點(diǎn)的順序,如果對順序有要求,那就不適用了。
該例子實(shí)現(xiàn)了對一顆樹的增刪改查。
因?yàn)槭茄舆t加載,所以在每個父節(jié)點(diǎn)的子節(jié)點(diǎn)1000以內(nèi)都是比較快的。
看哈效果圖:
看哈部分代碼treeRadio.js:
webFXTreeConfig.rootIcon = "xloadtree/images/xp/folder.png";webFXTreeConfig.openRootIcon = "xloadtree/images/xp/openfolder.png";webFXTreeConfig.folderIcon = "xloadtree/images/xp/folder.png";webFXTreeConfig.openFolderIcon = "xloadtree/images/xp/openfolder.png";webFXTreeConfig.fileIcon = "xloadtree/images/xp/file.png";webFXTreeConfig.lMinusIcon = "xloadtree/images/xp/Lminus.png";webFXTreeConfig.lPlusIcon = "xloadtree/images/xp/Lplus.png";webFXTreeConfig.tMinusIcon = "xloadtree/images/xp/Tminus.png";webFXTreeConfig.tPlusIcon = "xloadtree/images/xp/Tplus.png";webFXTreeConfig.iIcon = "xloadtree/images/xp/I.png";webFXTreeConfig.lIcon = "xloadtree/images/xp/L.png";webFXTreeConfig.tIcon = "xloadtree/images/xp/T.png";webFXTreeConfig.blankIcon = "xloadtree/images/blank.png";webFXTreeConfig.type = "radio"; //checkbox or radiovar prjPath = '/xloadtreeDemo';var actionSuffix = '.action';var namespace = '/Controller';var loadRootNodeAction = 'loadRootNode_XloadTree';var initAction = 'init_XloadTree';var addNodeAction = 'addNode_XloadTree';var saveOrUpdateRootNodeAction = 'saveOrUpdateRootNode_XloadTree';var deleteNodeAction = 'deleteNode_XloadTree';var loadChildNodeAction = 'loadChildNode_XloadTree';var updateNodeAction = 'updateNode_XloadTree';var loadTreeUrl = prjPath + namespace+'/' + loadRootNodeAction + actionSuffix;var loadChildNodeUrl = prjPath + namespace+'/' + loadChildNodeAction + actionSuffix;var initTreeUrl = prjPath + namespace+'/' + initAction + actionSuffix;var addNodeUrl = prjPath + namespace+'/' + addNodeAction + actionSuffix;var saveOrUpdateRootNodeUrl = prjPath + namespace+'/' + saveOrUpdateRootNodeAction + actionSuffix;var deleteNodeUrl = prjPath + namespace+'/' + deleteNodeAction + actionSuffix;var updateNodeUrl = prjPath + namespace+'/' + updateNodeAction + actionSuffix;var tree;$(function(){ loadTree();});//加載根節(jié)點(diǎn)function loadTree(){ $.ajax({ url:loadTreeUrl, dataType:'json', success:function(rootNode){ var id = rootNode.id; if(id != '0'){ updateTree(rootNode); }else{ $('#rootId').html('null'); $('#rootPid').html('null'); } } }); }//獲取根節(jié)點(diǎn)的子節(jié)點(diǎn)集合function updateTree(rootNode){ $('#rootText').val(rootNode.text); $('#rootAction').val(rootNode.action); $('#rootId').html(rootNode.id); $('#rootPid').html('null'); tree = new WebFXLoadTree(rootNode.text,initTreeUrl,rootNode.action); tree.data = rootNode; $('#radioDiv').html(tree.toString());}//點(diǎn)擊單選按鈕的回調(diào)事件function setRadioData(data){ if(typeof(data) == 'string'){ data = jQuery.parseJSON(data); } $('#pid').val(data.id);}//添加新節(jié)點(diǎn)function addNode(){ var selectNode = tree.selectNode; if(selectNode==null){ alert('選中一個節(jié)點(diǎn)進(jìn)行新增操作!'); return; } var treeNode = new Object(); treeNode.text = $("#text").val(); treeNode.action = $("#action").val(); treeNode.pid = $("#pid").val(); if(treeNode.text==''){ alert('text必須填寫!'); return; } $.ajax({ type:'POST', url:addNodeUrl, data:treeNode, dataType:'json', success:function(newNode){ //直接添加即可 selectNode.add(new WebFXTreeItem({ text:newNode.text, action:newNode.action, data:newNode })); selectNode.src = newNode.src; selectNode.expand(); //清空內(nèi)容 $("#text").val(''); $("#action").val(''); } });}//保存根節(jié)點(diǎn)信息function saveOrUpdateRootNode(){ var treeNode = new Object(); treeNode.text = $("#rootText").val(); treeNode.action = $("#rootAction").val(); treeNode.id = $("#rootId").html(); if(treeNode.text==''){ alert('text不能為空'); $("#rootText").focus(); return; } if(treeNode.id == 'null')treeNode.id = -1; $.ajax({ type:'POST', url:saveOrUpdateRootNodeUrl, data:treeNode, dataType:'json', success:function(rootNode){ $("#"+tree.id+"-anchor").html(rootNode.text); } });}//刷新選中節(jié)點(diǎn)的子節(jié)點(diǎn)信息function flushNode(){ var selectNode = tree.selectNode; if(selectNode==null){ alert('選中一個節(jié)點(diǎn)進(jìn)行刷新操作!'); return; } if(selectNode.childNodes.length!=0){ if(selectNode.reload){ selectNode.reload(); }else{ var parentNode = selectNode.parentNode; var index = selectNode.index; if(parentNode){ parentNode.reload(); } } }}//刪除節(jié)點(diǎn)function delNode(){ var selectNode = tree.selectNode; if(selectNode==null){ alert('選中一個節(jié)點(diǎn)進(jìn)行刪除操作!'); return; } var data = selectNode.data; if(typeof(data) == 'string'){ data = jQuery.parseJSON(data); } $.ajax({ type:'POST', url:deleteNodeUrl, data:{id:data.id}, success:function(result){ if(Number(result)!=0){ selectNode.remove(); tree.selectNode = null; } } });}//編輯節(jié)點(diǎn)信息function editNode(){ var selectNode = tree.selectNode; if(selectNode==null){ alert('選中一個節(jié)點(diǎn)進(jìn)行編輯操作!'); return; } var data = selectNode.data; if(typeof(data) == 'string'){ data = jQuery.parseJSON(data); } var treeNode = new Object(); treeNode.text = $("#text").val(); treeNode.action = $("#action").val(); treeNode.id = data.id; if(treeNode.text==''){ alert('text不能為空'); $("#text").focus(); return; } $.ajax({ type:'POST', url:updateNodeUrl, data:treeNode, dataType:'json', success:function(updateNode){ $("#"+selectNode.id+"-anchor").html(updateNode.text); $("#"+selectNode.id+"-anchor").attr('href',updateNode.action); selectNode.data = updateNode; } }); }