zTree實現節點修改的實時刷新


一、應用場景

在實際應用中會遇到動態操作樹各節點的需求,在增加樹節點后如何實時動態刷新樹就十分有必要了。

二、項目實踐

 

比如要在test1234節點下新建子節點,首先要選中test1234節點,添加成功后,根據test1234結點的TID去后台請求對應子節點數據,實現動態刷新。刪除節點類似。
 

三、代碼實現

1、初始化時必須設置配置

 
[javascript]  view plain  copy
 
  1. <span style="font-size:14px;"> async:{  
  2.             enable:true,  
  3.             url:"../admin/scriptManager/loadNodeByID.htm",  
  4.             autoParam:["id"],  
  5.             dataType:"json",  
  6.         },  
  7.         view: {  
  8.             selectedMulti: false  
  9.         }  
  10.     }</span>  
 


2、刷新方法

[javascript]  view plain  copy
 
  1. 2、刷新方法  
  2.     /** 
  3.      * 刷新當前節點 
  4.      */  
  5.     function refreshNode() {  
  6.         /*根據 treeId 獲取 zTree 對象*/  
  7.         var zTree = $.fn.zTree.getZTreeObj("scriptTree"),  
  8.         type = "refresh",  
  9.         silent = false,  
  10.         /*獲取 zTree 當前被選中的節點數據集合*/  
  11.         nodes = zTree.getSelectedNodes();  
  12.         /*強行異步加載父節點的子節點。[setting.async.enable = true 時有效]*/  
  13.         zTree.reAsyncChildNodes(nodes[0], type, silent);  
  14.     }  
  15.   
  16.     /** 
  17.      * 刷新當前選擇節點的父節點 
  18.      */  
  19.     function refreshParentNode() {  
  20.         var zTree = $.fn.zTree.getZTreeObj("scriptTree"),  
  21.         type = "refresh",  
  22.         silent = false,  
  23.         nodes = zTree.getSelectedNodes();  
  24.         /*根據 zTree 的唯一標識 tId 快速獲取節點 JSON 數據對象*/  
  25.         var parentNode = zTree.getNodeByTId(nodes[0].parentTId);  
  26.         /*選中指定節點*/  
  27.         zTree.selectNode(parentNode);  
  28.         zTree.reAsyncChildNodes(parentNode, type, silent);  
  29.     }  


3、涉及的方法詳解

 
1、$.fn.zTree.init(obj,zSetting,zNodes)zTree的初始化方法,創建zTree必須使用此方法

參數說明
obj JQuery Object用於展現zTree的DOM容器
zSetting  JSON zTree的配置數據,具體請參考 “setting 配置詳解”中的各個屬性詳細說明
zNodes  Array(JSON)/JSON zTree的節點數據,具體請參考 “treeNode 節點數據詳解”中的各個屬性詳細說明


返回值
zTree對象,提供操作zTree的各種方法,對於通過js操作zTree來說必須通過此對象
如果不需要自行設定全局變量保存,可以利用
2、zTreeObj.getSelectedNodes獲取 zTree 當前被選中的節點數據集合
返回值
返回值 Array(JSON)當前被選中的節點數據集合


方法實例:
1. 獲取當前被選中的節點數據集合
var treeObj = $.fn.zTree.getZTreeObj("tree");
var nodes = treeObj.getSelectedNodes();


3、zTreeObj.getNodeByTId根據 zTree 的唯一標識 tId 快速獲取節點 JSON 數據對象
參數:tId  String 節點在 zTree 內的唯一標識 tId
返回值:返回值  JSON tId 對應的節點 JSON 數據對象如無結果,返回 null


方法實例:
1. 獲取 tId = "tree_10" 的節點數據
var treeObj = $.fn.zTree.getZTreeObj("tree");
var node = treeObj.getNodeByTId("tree_10");


4、zTreeObj.selectNode選中指定節點
參數:treeNode  JSON 需要被選中的節點數據
addFlag  Boolean
addFlag = true 表示追加選中,會出現多點同時被選中的情況
addFlag = false 表示單獨選中,原先被選中的節點會被取消選中狀態
setting.view.selectedMulti = false 時,此參數無效,始終進行單獨選中

5、zTreeObj.reAsyncChildNodes強行異步加載父節點的子節點。[setting.async.enable = true 時有效]
參數:parentNode  JSON 指定需要異步加載的父節點 JSON 數據,
reloadType  String reloadType = "refresh" 表示清空后重新加載。reloadType != "refresh" 時,表示追加子節點處理
isSilent  Boolean 設定異步加載后是否自動展開父節點。isSilent = true 時,不展開父節點,其他值或缺省狀態都自動展開。

方法實例
1. 重新異步加載當前選中的第一個節點


var treeObj = $.fn.zTree.getZTreeObj("tree");
var nodes = treeObj.getSelectedNodes();
if (nodes.length>0) {
treeObj.reAsyncChildNodes(nodes[0], "refresh");
}
 

4、部分后台代碼

[java]  view plain  copy
 
  1. /** 
  2. * 查詢工程對象 
  3. *  
  4. * @return 
  5. */  
  6. @ResponseBody  
  7. @RequestMapping("/loadNodeByID.htm")  
  8. public List<ZTreeNode> loadNodeByID(Integer id) {  
  9.     List<ZTreeNode> nodes = cuScriptProjectService.loadNodesByID(id);  
  10.     // ZTreeNode zTreeNode = cuScriptProjectService.loadNodeByID(id);  
  11.     return nodes;  
  12. }  


 
 
2、
[java]  view plain  copy
 
  1. /** 
  2.  * 根據工程ID加載工程節點數據 
  3. */  
  4. @Override  
  5. public List<ZTreeNode> loadNodesByID(Integer id) {  
  6.     /* 查詢工程集合 */  
  7.     List<CUProject> allProjects = this.cuProjectDAO.findAllProjects();  
  8.     Map<Integer, List<CUProjectVO>> allPorjectList = this.buildProjectVOMap(allProjects);  
  9.   
  10.   
  11.     /* 查詢腳本集合 */  
  12.     List<CUScript> allScripts = this.cuScriptDAO.findAllScripts();  
  13.     Map<Integer, List<CUScriptVO>> allScriptMap = this.buildScriptVOMap(allScripts);  
  14.   
  15.   
  16.     /* 構建ZTreeNode數據結構 */  
  17.     List<ZTreeNode> treeNodeList = new ArrayList<ZTreeNode>();  
  18.     loopBuildZTree(id, allPorjectList, allScriptMap, treeNodeList);  
  19.     return treeNodeList;  
  20. }  


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM