這個ui用的一切都是json資料。樹也是如此!
背景需要傳回與格式比對的json資料才能正确加載樹。
頁面定義一個ui:
[html] view plain copy
- <ul id="messageInfoAddTree" class="easyui-tree" checkbox="true" data-options="lines:true" style="height:94%"></ul>
JS通路背景:
[javascript] view plain copy
- //人員樹
- $('#messageInfoAddTree').tree({
- url: "controller/crmMessageInfo/selectEditTree.json?rid=-1",
- loadFilter: function(data){
- return data;
- }
- });
背景實體Bean中需要的屬性:
[java] view plain copy
- public class EmployeeTree {
- private Integer id; //人員編号
- private String text; //人員名稱
- private Boolean checked = false; //是否選中
- private List<EmployeeTree> children; //子節點
- }
按照此種格式填充資料就能得到下面的結果:
擷取已勾選的節點資料:
[javascript] view plain copy
- var nodes = $('#messageInfoAddTree').tree('getChecked');
還有一個功能,就是讓tree的所有節點都勾選上或者取消勾選,在api中找了一下有一個方法:
check | target | 選中指定節點。 |
那我們隻能是選中根節點後,實作全選。
getRoot | none | 擷取根節點,傳回節點對象。 |
全選:
[javascript] view plain copy
- var root = $('#messageInfoAddTree').tree('getRoot');
- $("#messageInfoAddTree").tree('check',root.target);
取消選擇:
[javascript] view plain copy
- var root = $('#messageInfoAddTree').tree('getRoot');
- $("#messageInfoAddTree").tree('uncheck',root.target);
Jquery easyui tree Api:
Tree(樹)
使用$.fn.tree.defaults重寫預設值對象。
樹控件在web頁面中一個将分層資料以樹形結構進行顯示。它提供使用者展開、折疊、拖拽、編輯和異步加載等功能。
依賴關系
- draggable
- droppable
使用案例
樹控件使用<ul>元素定義。标簽能夠定義分支和子節點。節點都定義在<ul>清單内的<li>元素中。以下顯示的元素将被用作樹節點嵌套在<ul>元素中。
- <ul id="tt" class="easyui-tree">
- <li>
- <span>Folder</span>
- <ul>
- <li>
- <span>Sub Folder 1</span>
- <ul>
- <li>
- <span><a href="#">File 11</a></span>
- </li>
- <li>
- <span>File 12</span>
- </li>
- <li>
- <span>File 13</span>
- </li>
- </ul>
- </li>
- <li>
- <span>File 2</span>
- </li>
- <li>
- <span>File 3</span>
- </li>
- </ul>
- </li>
- <li>
- <span>File21</span>
- </li>
- </ul>
樹控件也可以定義在一個空<ul>元素中并使用Javascript加載資料。
- <ul id="tt"></ul>
- $('#tt').tree({
- url:'tree_data.json'
- });
使用loadFilter函數處理來自Web Services的JSON資料。
- $('#tt').tree({
- url: ...,
- loadFilter: function(data){
- if (data.d){
- return data.d;
- } else {
- return data;
- }
- }
- });
樹控件資料格式化
每個節點都具備以下屬性:
- id:節點ID,對加載遠端資料很重要。
- text:顯示節點文本。
- state:節點狀态,'open' 或 'closed',預設:'open'。如果為'closed'的時候,将不自動展開該節點。
- checked:表示該節點是否被選中。
- attributes: 被添加到節點的自定義屬性。
- children: 一個節點數組聲明了若幹節點。
一些案例:
- [{
- "id":1,
- "text":"Folder1",
- "iconCls":"icon-save",
- "children":[{
- "text":"File1",
- "checked":true
- },{
- "text":"Books",
- "state":"open",
- "attributes":{
- "url":"/demo/book/abc",
- "price":100
- },
- "children":[{
- "text":"PhotoShop",
- "checked":true
- },{
- "id": 8,
- "text":"Sub Bookds",
- "state":"closed"
- }]
- }]
- },{
- "text":"Languages",
- "state":"closed",
- "children":[{
- "text":"Java"
- },{
- "text":"C#"
- }]
- }]
異步樹控件
樹控件内建異步加載模式的支援,使用者先建立一個空的樹,然後指定一個伺服器端,執行檢索後動态傳回JSON資料來填充樹并完成異步請求。例子如下:
- <ul class="easyui-tree" data-options="url:'get_data.php'"></ul>
樹控件讀取URL。子節點的加載依賴于父節點的狀态。當展開一個封閉的節點,如果節點沒有加載子節點,它将會把節點id的值作為http請求參數并命名為'id',通過URL發送到伺服器上面檢索子節點。
下面是從伺服器端傳回的資料。
- [{
- "id": 1,
- "text": "Node 1",
- "state": "closed",
- "children": [{
- "id": 11,
- "text": "Node 11"
- },{
- "id": 12,
- "text": "Node 12"
- }]
- },{
- "id": 2,
- "text": "Node 2",
- "state": "closed"
- }]
節點1和節點2是封閉的,當展開節點1的時候将直接顯示它的子節點。當展開節點2的時候它将發送值(2)到伺服器擷取子節點。
屬性
屬性名 | 屬性值類型 | 描述 | 預設值 |
---|---|---|---|
url | string | 檢索遠端資料的URL位址。 | null |
method | string | 檢索資料的HTTP方法。(POST / GET) | post |
animate | boolean | 定義節點在展開或折疊的時候是否顯示動畫效果。 | false |
checkbox | boolean | 定義是否在每一個借點之前都顯示複選框。 | false |
cascadeCheck | boolean | 定義是否層疊選中狀态。 | true |
onlyLeafCheck | boolean | 定義是否隻在末級節點之前顯示複選框。 | false |
lines | boolean | 定義是否顯示樹控件上的虛線。 | false |
dnd | boolean | 定義是否啟用拖拽功能。 | false |
data | array | 節點資料加載。 | null |
formatter | function(node) | 定義如何渲染節點的文本。 代碼示例: | false |
loader | function(param,success,error) | 定義如何從遠端伺服器加載資料。傳回false可以忽略本操作。該函數具備以下參數: param:發送到遠端伺服器的參數對象。 success(data):當檢索資料成功的時候調用的回調函數。 error():當檢索資料失敗的時候調用的回調函數。 | json loader |
loadFilter | function(data,parent) | 傳回過濾過的資料進行展示。傳回資料是标準樹格式。該函數具備以下參數: data:加載的原始資料。 parent: DOM對象,代表父節點。 |
事件
很多事件的回調函數都包含'node'參數,其具備如下屬性:
- id:綁定節點的辨別值。
- text:顯示的節點文本。
- iconCls:顯示的節點圖示CSS類ID。
- checked:該節點是否被選中。
- state:節點狀态,'open' 或 'closed'。
- attributes:綁定該節點的自定義屬性。
- target:目标DOM對象。
事件名 | 事件參數 | 描述 |
---|---|---|
onClick | node | 在使用者點選一個節點的時候觸發。 代碼示例: |
onDblClick | node | 在使用者輕按兩下一個節點的時候觸發。 |
onBeforeLoad | node, param | 在請求加載遠端資料之前觸發,傳回false可以取消加載操作。 |
onLoadSuccess | node, data | 在資料加載成功以後觸發。 |
onLoadError | arguments | 在資料加載失敗的時候觸發,arguments參數和jQuery的$.ajax()函數裡面的'error'回調函數的參數相同。 |
onBeforeExpand | node | 在節點展開之前觸發,傳回false可以取消展開操作。 |
onExpand | node | 在節點展開的時候觸發。 |
onBeforeCollapse | node | 在節點折疊之前觸發,傳回false可以取消折疊操作。 |
onCollapse | node | 在節點折疊的時候觸發。 |
onBeforeCheck | node, checked | 在使用者點選勾選複選框之前觸發,傳回false可以取消選擇動作。(該事件自1.3.1版開始可用) |
onCheck | node, checked | 在使用者點選勾選複選框的時候觸發。 |
onBeforeSelect | node | 在使用者選擇一個節點之前觸發,傳回false可以取消選擇動作。 |
onSelect | node | 在使用者選擇節點的時候觸發。 |
onContextMenu | e, node | 在右鍵點選節點的時候觸發。 代碼示例: |
onBeforeDrag | node | 在開始拖動節點之前觸發,傳回false可以拒絕拖動。(該事件自1.3.2版開始可用) |
onStartDrag | node | 在開始拖動節點的時候觸發。(該事件自1.3.2版開始可用) |
onStopDrag | node | 在停止拖動節點的時候觸發。(該事件自1.3.2版開始可用) |
onDragEnter | target, source | 在拖動一個節點進入到某個目标節點并釋放的時候觸發,傳回false可以拒絕拖動。 target:釋放的目标節點元素。 source:開始拖動的源節點。 (該事件自1.3.2版開始可用) |
onDragOver | target, source | 在拖動一個節點經過某個目标節點并釋放的時候觸發,傳回false可以拒絕拖動。 target:釋放的目标節點元素。 source:開始拖動的源節點。 (該事件自1.3.2版開始可用) |
onDragLeave | target, source | 在拖動一個節點離開某個目标節點并釋放的時候觸發,傳回false可以拒絕拖動。 target:釋放的目标節點元素。 source:開始拖動的源節點。 (該事件自1.3.2版開始可用) |
onBeforeDrop | target, source, point | 在拖動一個節點之前觸發,傳回false可以拒絕拖動。 target:釋放的目标節點元素。 source:開始拖動的源節點。 point:表示哪一種拖動操作,可用值有:'append','top' 或 'bottom'。 (該事件自1.3.3版開始可用) |
onDrop | target, source, point | 當節點位置被拖動時觸發。 target:DOM對象,需要被拖動動的目标節點。 source:源節點。 point:表示哪一種拖動操作,可用值有:'append','top' 或 'bottom'。 |
onBeforeEdit | node | 在編輯節點之前觸發。 |
onAfterEdit | node | 在編輯節點之後觸發。 |
onCancelEdit | node | 在取消編輯操作的時候觸發。 |
方法
方法名 | 方法參數 | 描述 |
---|---|---|
options | none | 傳回樹控件屬性。 |
loadData | data | 讀取樹控件資料。 |
getNode | target | 擷取指定節點對象。 |
getData | target | 擷取指定節點資料,包含它的子節點。 |
reload | target | 重新載入樹控件資料。 |
getRoot | none | 擷取根節點,傳回節點對象。 |
getRoots | none | 擷取所有根節點,傳回節點數組。 |
getParent | target | 擷取父節點,'target'參數代表節點的DOM對象。 |
getChildren | target | 擷取所有子節點,'target'參數代表節點的DOM對象。 |
getChecked | state | 擷取所有選中的節點。'state'可用值有:'checked','unchecked','indeterminate'。如果'state'未指定,将傳回'checked'節點。 代碼示例: |
getSelected | none | 擷取選擇節點并傳回它,如果未選擇則傳回null。 |
isLeaf | target | 判斷指定的節點是否是葉子節點,target參數是一個節點DOM對象。 |
find | id | 查找指定節點并傳回節點對象。 代碼示例: |
select | target | 選擇一個節點,'target'參數表示節點的DOM對象。 |
check | target | 選中指定節點。 |
uncheck | target | 取消選中指定節點。 |
collapse | target | 折疊一個節點,'target'參數表示節點的DOM對象。 |
expand | target | 展開一個節點,'target'參數表示節點的DOM對象。在節點關閉或沒有子節點的時候,節點ID的值(名為'id'的參數)将會發送給伺服器 請求子節點的資料。 |
collapseAll | target | 折疊所有節點。 |
expandAll | target | 展開所有節點。 |
expandTo | target | 打開從根節點到指定節點之間的所有節點。 |
scrollTo | target | 滾動到指定節點。(該方法自1.3.4版開始可用) |
append | param | 追加若幹子節點到一個父節點,param參數有2個屬性: parent:DOM對象,将要被追加子節點的父節點,如果未指定,子節點将被追加至根節點。 data:數組,節點資料。 代碼示例: |
toggle | target | 打開或關閉節點的觸發器,target參數是一個節點DOM對象。 |
insert | param | 在一個指定節點之前或之後插入節點,'param'參數包含如下屬性: before:DOM對象,在某個節點之前插入。 after:DOM對象,在某個節點之後插入。 data:對象,節點資料。 下面的代碼展示了如何将一個新節點插入到選擇的節點之前: |
remove | target | 移除一個節點和它的子節點,'target'參數是該節點的DOM對象。 |
pop | target | 移除一個節點和它的子節點,該方法跟remove方法一樣,不同的是它将傳回被移除的節點資料。 |
update | param | 更新指定節點。'param'參數包含以下屬性: target(DOM對象,将被更新的目标節點),id,text,iconCls,checked等。 代碼示例: |
enableDnd | none | 啟用拖拽功能。 |
disableDnd | none | 禁用拖拽功能。 |
beginEdit | target | 開始編輯一個節點。 |
endEdit | target | 結束編輯一個節點。 |
cancelEdit | target | 取消編輯一個節點。 |