Tree 數據轉換
所有節點都包含以下屬性:
- id:節點id,這個很重要到加載遠程服務器數據 which is important to load remote data
- 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#"
- }]
- }]
異步加載樹
tree 支持內置的異步加載模式,用戶創建一個空的tree,然后定義一個遠程服務器站點返回json數據用於填充tree來異步滿足異步加載需求.例如:
- <ul class="easyui-tree" data-options="url:'get_data.php'"></ul>
tree的加載是通過URL 'get_data.php'站點.子節點的加載依賴於父節點的狀態.當展開一個關閉節點,如果節點沒有子節點加載,將發送節點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都是closed狀態的,可以直接顯示它們的子節點,當展開節點2時,發送值2到遠程服務器檢索子節點
這個教程創建異步的樹click me!!!,展示如何寫服務器端代碼根據需求返回tree數據.
一、方法
| Name | Type | Description | Default |
|---|---|---|---|
| url | string | 一個從遠程服務器檢索數據的URL. | null |
| method | string | 檢索數據的http方法類型. | post |
| animate | boolean | 定義當展開/折疊節點的時候是否顯示效果. | false |
| checkbox | boolean | 定義是否顯示checkbox在所有節點之前. | false |
| cascadeCheck | boolean | 定義是否級聯選擇. | true |
| onlyLeafCheck | boolean | 定義是否僅僅只是在葉子節點顯示checkbox. | false |
| lines | boolean | 定義是否顯示樹線. | false |
| dnd | boolean | 定義是否啟用drag and drop. | false |
| data | array | 這個節點數據將被加載. $('#tt').tree({
data: [{
text: 'Item1',
state: 'closed',
children: [{
text: 'Item11'
},{
text: 'Item12'
}]
},{
text: 'Item2'
}]
});
|
null |
| loader | function(param,success,error) | 定義如何從遠程服務器加載數據.返回false將終止這個動作.這個函數提供以下參數: param: 這個參數對象將傳送給遠程服務器. success(data): 當檢索數據成功之后的回調函數. error(): 當檢索數據出現異常的時候調用的回調函數. |
json loader |
| loadFilter | function(data,parent) | 返回顯示過濾后的數據. 返回的數據是標准的tree格式.這個函數提供以下參數: data:裝載的是原始數據. parent: DOM 對象, 指定父節點. |
二、事件
許多回調函數提供'node'參數, 都包含以下屬性:
- id: 綁定到節點的標識值.
- text:顯示文本.
- iconCls: 顯示icon的css樣式.
- checked: 節點是否選中.
- state: 節點狀態, 'open' 或者 'closed'.
- attributes: 綁定到節點的自定義屬性.
- target: 目標 DOM 對象.
| Name | Parameters | Description |
|---|---|---|
| onClick | node | 當用戶點擊節點的時候觸發. 示例代碼: $('#tt').tree({
onClick: function(node){
alert(node.text); // alert node text property when clicked
}
});
|
| onDblClick | node | 當用戶雙擊一個節點的時候觸發. |
| onBeforeLoad | node, param | 當一個請求加載數據在前觸發, 返回false取消加載動作. |
| onLoadSuccess | node, data | 當數據加載成功之后觸發. |
| onLoadError | arguments | 當數據加載失敗觸發,arguments參數和ajax jQuery 的'error'一樣 . |
| onBeforeExpand | node | 節點展開之前觸發,返回false取消展開動作. |
| onExpand | node | 當節點展開之后觸發. |
| onBeforeCollapse | node | 節點折疊之前觸發,返回false將取消折疊動作. |
| onCollapse | node | 當節點折疊之后觸發. |
| onCheck | node, checked | 當用戶點擊checkbox的時候觸發. |
| onBeforeSelect | node | 節點被選中之前觸發,返回false取消選擇動作. |
| onSelect | node | 當節點選中之后觸發. |
| onContextMenu | e, node | 當在節點上右鍵點擊的時候觸發,代碼示例: // 右鍵點擊節點然后顯示上下文菜單
$('#tt').tree({
onContextMenu: function(e, node){
e.preventDefault();
// 選擇節點
$('#tt').tree('select', node.target);
// 顯示上下文菜單
$('#mm').menu('show', {
left: e.pageX,
top: e.pageY
});
}
});
//上下文菜單定義如下:
<div id="mm" class="easyui-menu" style="width:120px;">
<div onclick="append()" data-options="iconCls:'icon-add'">Append</div>
<div onclick="remove()" data-options="iconCls:'icon-remove'">Remove</div>
</div>
|
| onDrop | target, source, point | 當節點被放置的時候觸發. target: DOM 對象,這個節點是被放置的目標. source: 源節點. point:指明drop操作,可用值有: 'append','top' or 'bottom'. |
| onBeforeEdit | node | 在編輯節點之前觸發. |
| onAfterEdit | node | 編輯節點之后觸發. |
| onCancelEdit | node | 取消編輯動作時候觸發. |
三、方法
| Name | Parameter | Description |
|---|---|---|
| options | none | 返回tree 的options. |
| loadData | data | 加載tree數據. |
| getNode | target | 得到特定的節點對象. |
| getData | target | 得到特定節點數據, 包含其子節點. |
| reload | target | 重新加載tree數據. |
| getRoot | none | 得到根節點, 返回節點對象 |
| getRoots | none | 得到根節點, 返回節點數組. |
| getParent | target | 得到父節點,target參數指明節點DOM對象. |
| getChildren | target | 得到子節點,target 參數指明節點DOM對象. |
| getChecked | none | 得到所有選中節點. |
| getSelected | none | 得到選擇節點和返回它,如果沒有選擇節點將返回null. |
| isLeaf | target | 解決特定的節點是否是葉子節點, target 參數指明節點DOM對象. |
| find | id | 查找特定的節點和返回節點對象,代碼示例: // 查找一個節點然后返回它
var node = $('#tt').tree('find', 12);
$('#tt').tree('select', node.target);
|
| select | target | 選擇一個節點,target 參數指明節點DOM對象. |
| check | target | 設置特定的節點選中. |
| uncheck | target | 設置特定的節點取消選中. |
| collapse | target | 折疊一個節點, target 參數指明節點DOM對象. |
| expand | target | 展開一個節點, target 參數指明節點DOM對象,當節點的狀態是closed的時候 和沒有子節點,節點id值(參數命名為'id')將發送給服務器請求子節點數據. |
| collapseAll | target | 折疊所有節點. |
| expandAll | target | 展開所有節點. |
| expandTo | target | 展開從根節點到指定的節點 . |
| append | param | 附加一些子節點到父節點中. param參數有兩個屬性: parent: DOM 對象,被添加到的父節點,如果沒有分配,附加到根節點. data: array, the nodes data. Code example: // 添加一些節點到選擇的節點
var selected = $('#tt').tree('getSelected');
$('#tt').tree('append', {
parent: selected.target,
data: [{
id: 23,
text: 'node23'
},{
text: 'node24',
state: 'closed',
children: [{
text: 'node241'
},{
text: 'node242'
}]
}]
});
|
| toggle | target | 切換expanded/collapsed 節點的狀態,target 參數指明節點DOM對象. |
| insert | param | 插入一個節點到特定節點的之前或之后.'param'參數包含以下屬性: before: DOM 對象,節點插入到之前. after: DOM 對象, 節點插入到之后. data: object, 節點數據. 以下代碼展示,如何插入新節點到選擇節點之前: var node = $('#tt').tree('getSelected');
if (node){
$('#tt').tree('insert', {
before: node.target,
data: {
id: 21,
text: 'node text'
}
});
}
|
| remove | target | 移除一個節點和其子節點,target 參數指明節點DOM對象. |
| pop | target | 移除一個節點和其子節點,這個方法和remove類似,但是它返回移除的節點數據. |
| update | param | 更新特定的節點. 'param'參數包含以下屬性: target(DOM 對象, 更新的節點),id,text,iconCls,checked,等等. 示例代碼: // 更新選擇的節點文本
var node = $('#tt').tree('getSelected');
if (node){
$('#tt').tree('update', {
target: node.target,
text: 'new text'
});
}
|
| enableDnd | none | 啟用 drag 和 drop 功能. |
| disableDnd | none | 禁用 drag 和drop 功能. |
| beginEdit | target | 開始編輯一個節點. |
| endEdit | target | 結束編輯一個節點. |
| cancelEdit | target | 取消編輯一個節點. |
