利用jstree插件輕松構建樹應用


利用jstree插件輕松構建樹應用

最近完成了項目中的一個樹狀應用,第一次接觸了jstree這個插件,總的來說它的官方文檔還是比較詳細的,但是在使用過程中還是出現了一些問題,下面我就來談談這款插件的使用和心得。

首先項目需要構建一棵樹,利用jstree插件我們先在頁面上靜態的把這棵樹渲染出來,參照官方文檔(http://www.jstree.com/),代碼如下:

復制代碼
 1 <!DOCTYPE html>
 2 <html lang="en">
 3 <head>
 4     <meta charset="UTF-8">
 5     <title>Document</title>
 6     <link rel="stylesheet" type="text/css" href="js/jstree/themes/default/style.min.css">
 7 </head>
 8 <body>
 9     <div id="jstree">
10           
11     </div>
12     <script src="js/jquery.js"></script>
13     <script src="js/jstree/jstree.min.js"></script>
14     <script src="js/jstree/jstree.checkbox.js"></script>
16     <script>
17         $(function(){
18             $("#jstree").jstree({
19                   "plugins" : ["checkbox"],
20                   'core' : {
21                   'data' :  [
22                        { "id" : "ajson1", "parent" : "#", "text" : "Simple root node" },
23                        { "id" : "ajson2", "parent" : "#", "text" : "Root node 2" },
24                        { "id" : "ajson3", "parent" : "ajson2", "text" : "Child 1" },
25                        { "id" : "ajson4", "parent" : "ajson2", "text" : "Child 2" },
26                     ]
27                 });
28         });
29     </script>
30 </body>
31 </html>
復制代碼

現在我們的數據是通過JS完全寫死的,真實項目中我們需要向后台發送請求獲取渲染數據,所以得利用jstree自己封裝的ajax方式,代碼如下:

復制代碼
 1     <script>
 2         $(function(){
 3             $("#jstree").jstree({
 4                   "plugins" : ["checkbox"],
 5                   'core' : {
 6                   'data' : {
 7                     'url' : '/usual/psd_demo_push/1/', //請求地址
 8                     'data' : function (node) {
 9                       return { 'id' : node.id };
10                     }
11                   }
12                 });
13         });
14     </script>
復制代碼

這樣這個插件就會向

'/usual/psd_demo_push/1/'

發送請求,返回的數據和原來我們靜態寫死在js里的格式是一致的,但需要注意的是,這一數據必須是json對象(object),如果返回的json字符串(string)渲染頁面也會失敗,這一問題

非常不易發現,因為通過瀏覽器觀察這兩種數據是一樣的,當我用typeof將其格式打印出來后只有顯示object的才能渲染出來,同時我們能使用的屬性也必須按照官方文檔提供的那樣,額外屬性則必須寫在li_attr或a_attr中,否則是取不到值的:

復制代碼
 1 {
 2   id          : "string" 
 3   parent      : "string" 
 4   text        : "string" 
 5   icon        : "string" 
 6   state       : {
 7     opened    : boolean  
 8     disabled  : boolean  
 9     selected  : boolean  
10   },
11   li_attr     : {}  
12   a_attr      : {}  
13 }
復制代碼

剛才我們通過動態的方式實現了樹的顯示,但是如果服務器端傳輸的數據量很大,我們需要異步加載數據的話,jstree也提供了這一的功能,在剛才的js代碼中的已經運用到了,即:

1 'data' : function (node) {
2       return { 'id' : node.id };
3 }

但是如果按照上述方法進行測試確是行不通的,因為通過上述形式的data格式,我們只知道每一個節點的父節點(parent)是哪一個,但是我們不知道該節點下是否存在子節點,所以我們點擊父節點的時候沒有辦法判斷該節點下的子節點個數,也就無法從后台獲取數據,通過查閱官方文檔及所搜其他資料后發現,如果需要異步獲取數據,data的格式必須使用官方提供的第二種形式:

復制代碼
 1 'data' : [
 2        'Simple root node',
 3        {
 4          'text' : 'Root node 2',
 5          'state' : {
 6            'opened' : true,
 7            'selected' : true
 8          },
 9          'children' : [
10            { 'text' : 'Child 1' },
11            'Child 2'
12          ]
13       }
14  ]
復制代碼

在這一種json形式中提供了每一個節點的'children'屬性,如果沒有則不含子節點,這樣當存在子節點時后台提供'children':true就ok了,當點擊該節點展開按鈕后children中的json內容就會動態渲染到頁面中,實現異步獲取,大大減輕了頁面的數據傳輸量。

所以最后建議使用第二種格式,如下:

復制代碼
 1 {
 2   id          : "string" 
 3   text        : "string" 
 4   icon        : "string" 
 5   state       : {
 6     opened    : boolean  
 7     disabled  : boolean  
 8     selected  : boolean  
 9   },
10   children    : []  
11   li_attr     : {}  
12   a_attr      : {}  
13 }
復制代碼

具體的演示操作官方也提供了它的地址:

http://jsfiddle.net/vakata/2kwkh2uL/5/ 

大家可以對其進行調試,觀察其數據請求的形式和內容,對使用該插件會有很大的幫助,同時官方文檔也提供了非常豐富的api,github:

https://github.com/vakata/jstree#the-required-json-format

 

 
分類:  jquery
標簽:  jqueryjstree


免責聲明!

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



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