異步ztree 加復選框 及相應后台處理


 

異步加載 tree,點一下節點,就發一下請求到后台,然后顯示出得到的當前層級節點

 

  1 <!DOCTYPE html>
  2 <html>
  3     <head>
  4         <meta charset="utf-8" />
  5         <title></title>
  6     </head>
  7     <script type="text/javascript" src="js/jquery-1.8.0.js" ></script>
  8     <body>
  9         <ul id="myTree"></ul> ///定義ztree要顯示的容器標簽
 10         
 11     </body>
 12     <script>
 13         var myTreeNodes = [];  //定義接收返回集合的容器,為了在后面init真正初始化樹時,作為最后一個參數用
 14         var IDMark_A = "_a"; //定義個變量,其實就是為了后面匹配tree自動生成的a標簽(在這里做下說明而已,不定義直接在下面拼也行吧)
 15         var mySetting = {
 16             view:{
 17                 addDivDom: myyAddDivDom //自定義控件,這里是加入了復選框
 18             },
 19             data:{
 20                 key:title:"name",  //設置title提示信息對應的屬性名稱 也就是節點相關的某個屬性
 21                 children:"childNodes"
 22             },
 23             async:{
 24                 enable:true, //是否開啟異步加載模式
 25                 type:'post',
 26                 url: myGetUrl,//得到請求路徑的方法
 27                 dataFilter: myFilter //對於請求回來的數據進行預處理的方法
 28             }
 29         }
 30         
 31         //加入自定義的顯示控件 (這里是文本框)
 32         function myAddDivDom(tree,treeNode){
 33             var aObj = $("#"+treeNode.tId+IDMark_A);///這個就是個選擇器,選的是原節點所在的a標簽(這是tree自己生成的a標簽)
 34             if(treeNode.myCheck=="1"){///這個是可以自己加判斷,讓指定的對象前加上復選框
 35                 var editStr = "<input type='checkbox' value='"+treeNode.id+"'onfocus='this.blur();'></input>";
 36                 aObj.before(editStr); ///before是jq的方法,意思是在調用者標簽的簽名加入參數(參數也可以是標簽,和html()方法的參數是一樣的)
 37             }
 38         }
 39         
 40         //得到請求路徑
 41         function myGetUrl(treeId,treeNode){
 42             var firstId = "";//第一個節點對象的id
 43             var  url = "";
 44             if(treeNode==null){ //第一次,加載樹時發的請求
 45                 url = path+"xxx/loadNextTreeNodes.do?id="+firstId+"&otherParam"+otherParam;                
 46             }else{//樹加載完成后,點擊某個(有子節點的)節點后發出的請求
 47                 url = path + "xxx/loadNextTreeNodes.do?id="+treeNode.id+"&otherParam"+otherParam;
 48             }
 49             return url;
 50         }
 51         
 52         //對返回的數據進行預處理
 53         function myFilter(treeId,parentNode,childNodes){
 54             for (var i=0,i<childNodes.length;i++) {
 55             /*
 56              下面等號左邊的 childNodes[i] 的屬性都是在 tree中要顯示的每個節點的屬性,
 57              而右邊的childNodes[i]的屬性則表示從后台得到的對象集合中每個對象的真實屬性
 58             */
 59                 childNodes[i].code=xxxx;
 60                 childNodes[i].open=true;
 61                 childNodes[i].name = childNodes[i].xxxName;
 62                 childNodes[i].xxx = childNodes[i].xxxxx;
 63                 
 64                 if(childNodes[i].hasChild==1){
 65                     childNodes[i].isParent = true;///要顯示成樹,集合中的數據必須要有個boolean類型的 isParent屬性
 66                     //可以在后台對象屬性上直接加上,也可以在預處理這里的js中根據條件加上這個屬性
 67                 }
 68             }
 69             return childNodes;
 70         }
 71         
 72         ///上面這些都是為了生成樹的准備信息,下面這句才是真正生成樹的代碼(當然這句可以放在任意位置,比如最上面也可以)
 73         $.fn.zTree.init($("#myTree"),mySetting,myTreeNodes);//參數1:容器對象  2:tree的setting設置  3:接收后台返回值的數組
 74         /*
 75          執行這句的時候,會自動 先執行 myGetUrl 方法,得到 url,然后自動發送這個url到后台請求數據(就和ajax一樣,其實這句話里面就是發了一個ajax請求),
 76          然后請求回來的 數據會自動先傳入myFilter方法的childNodes參數中,並執行myFilter方法,
 77          然后在加載tree的同時自動調用myAddDivDom方法,在對應的節點前拼好checkbox復選框,並顯示在頁面上。
 78          */
 79         
 80     </script>
 81     
 82     <script>
 83         //下面這些都是java代碼
 84         @ResponseBody
 85         @RequestMapping("loadNextTreeNodes")
 86         public void loadNextTreeNodes(){
 87             List list=[];//假設后台有一個要展示為 tree的list集合
 88             for(item:list){
 89                 item.setHasChild("0");
 90                 if(xxx){
 91                     item.setHasChild("1");
 92                 }
 93             }
 94             writeJson(list);//把list轉成json寫到前台
 95         }
 96         
 97         //下面這個就是封裝了個寫json到前台的方法,供參考
 98         public void writeJson(Object obj){
 99             PrintWriter out = null;
100             try{
101                 response.setContentType("");
102                 response.setHeader("");
103                 response.setHeader("");
104                 out = response.getWriter();
105                 out.print(new Gson().toJson(obj));
106             }catch(Exception e){
107                 
108             }finally{
109                 try{
110                     FileUtil.flushAndCloseWrite(out);//關閉流
111                 }catch(e){
112                 }
113             }
114         }
115         
116     </script>
117 </html>

 


免責聲明!

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



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