jQuery EasyUI データグリッドとツリープラグイン -Tree ツリー
jQuery EasyUI プラグイン
$.fn.tree.defaults を使用してデフォルトの defaults を上書きします。
ツリー(tree)は、Webページ上で階層データをツリー構造で表示します。ユーザーに展開、折りたたみ、ドラッグ&ドロップ、編集、非同期読み込み機能を提供します。
依存
- draggable
- droppable
使用法
ツリー(tree)は <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="../index.html">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>
ツリー(Tree)は空の <ul> 要素内に定義し、javascript を使用してデータを読み込むこともできます。
<ul id="tt"></ul>
$('#tt').tree({
url:'tree_data.json'
});
loadFilter を使用して、ASP.NET Web サービスからの json データを処理します。
$('#tt').tree({
url: ...,
loadFilter: function(data){
if (data.d){
return data.d;
} else {
return data;
}
}
});
ツリーのデータ形式(Tree Data Format)
各ノードには次の属性を含めることができます:
- 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 'get_data.php' を介して読み込まれます。子ノードは親ノードの状態に応じて読み込まれます。閉じたノードを展開するとき、そのノードに子ノードが読み込まれていない場合、定義された URL を介してサーバーにノードの id 値を 'id' という名前の http リクエストパラメータとして送信し、子ノードを取得します。
サーバーから返されるデータを見てください:
[{
"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 を展開すると、サーバーに value(2) が送信され、子ノードが取得されます。
本チュートリアルの非同期ツリーの作成要件に応じてツリーのデータを返すサーバーコードの記述方法を示しています。
属性
| 名前 | タイプ | 説明 | デフォルト値 |
|---|---|---|---|
| url | string | リモートデータを取得する URL。 | null |
| method | string | データを取得する http メソッド(method)。 | post |
| animate | boolean | ノードの展開/折りたたみ時にアニメーション効果を表示するかどうかを定義します。 | false |
| checkbox | boolean | 各ノードの前にチェックボックスを表示するかどうかを定義します。 | false |
| cascadeCheck | boolean | カスケードチェックを行うかどうかを定義します。 | true |
| onlyLeafCheck | boolean | リーフノードの前にのみチェックボックスを表示するかどうかを定義します。 | false |
| lines | boolean | ツリーのラインを表示するかどうかを定義します。 | false |
| dnd | boolean | ドラッグ&ドロップを有効にするかどうかを定義します。 | false |
| data | array | 読み込むノードデータ。
$('#tt').tree({
data: [{
text: 'Item1',
state: 'closed',
children: [{
text: 'Item11'
},{
text: 'Item12'
}]
},{
text: 'Item2'
}]
});
|
null |
| formatter | function(node) | ノードテキストの表示方法を定義します。 コード例:
$('#tt').tree({
formatter:function(node){
return node.text;
}
});
|
|
| loader | function(param,success,error) | リモートサーバーからデータを読み込む方法を定義します。false を返すとアクションがキャンセルされます。この関数には次のパラメータがあります: param: リモートサーバーに渡すパラメータオブジェクト。 success(data): データの取得が成功したときに呼び出されるコールバック関数。 error(): データの取得が失敗したときに呼び出されるコールバック関数。 |
json loader |
| loadFilter | function(data,parent) | 表示するフィルタリングされたデータを返します。データは標準のツリー形式で返されます。この関数には次のパラメータがあります: data: 読み込む生データ。 parent: 親ノードを表す DOM オブジェクト。 |
イベント
多くのイベントのコールバック関数には 'node' パラメータが必要です。これには次の属性が含まれます:
- id: ノードにバインドされる識別値。
- text: 表示するテキスト。
- iconCls: アイコンを表示するための css class。
- checked: ノードが選択されているかどうか。
- state: ノードの状態。'open' または 'closed'。
- attributes: ノードにバインドされるカスタム属性。
- target: ターゲットの DOM オブジェクト。
| 名前 | パラメータ | 説明 |
|---|---|---|
| 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 パラメータは 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 | ノードを右クリックしたときにトリガーされます。コード例:
// right click node and then display the context menu
$('#tt').tree({
onContextMenu: function(e, node){
e.preventDefault();
// select the node
$('#tt').tree('select', node.target);
// display context menu
$('#mm').menu('show', {
left: e.pageX,
top: e.pageY
});
}
});
// the context menu is defined as below:
<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>
|
| 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 | ノードがドロップ可能なターゲットノードからドラッグアウトされたときにトリガーされます。 target: ドロップされるターゲットノード要素。 source: ドラッグされているソースノード。 このイベントはバージョン 1.3.2 以降で使用できます。 |
| onBeforeDrop | target,source,point | ノードがドロップされる前にトリガーされます。false を返すとドロップが禁止されます。 target: ドロップのターゲットノードである DOM オブジェクト。 source: ソースノード。 point: ドロップ操作を表します。可能な値は、'append'、'top'、'bottom' です。 このイベントはバージョン 1.3.2 以降で使用できます。 |
| onDrop | target,source,point | ノードがドロップされたときにトリガーされます。
target: ドロップのターゲットノードである DOM オブジェクト。 source: ソースノード。 point: ドロップ操作を表します。可能な値は、'append'、'top'、'bottom' です。 |
| onBeforeEdit | node | ノードを編集する前にトリガーされます。 |
| onAfterEdit | node | ノードを編集した後にトリガーされます。 |
| onCancelEdit | node | 編集アクションがキャンセルされたときにトリガーされます。 |
メソッド
| 名前 | パラメータ | 説明 |
|---|---|---|
| options | none | ツリーのオプション(options)を返します。 |
| loadData | data | ツリーのデータを読み込みます。 |
| getNode | target | 指定されたノードオブジェクトを取得します。 |
| getData | target | 指定されたノードデータを、その子ノードを含めて取得します。 |
| reload | target | ツリーのデータを再読み込みします。 |
| getRoot | none | ルートノードを取得し、ノードオブジェクトを返します。 |
| getRoots | none | ルートノードを取得し、ノード配列を返します。 |
| getParent | target | 親ノードを取得します。target パラメータはノードの DOM オブジェクトを表します。 |
| getChildren | target | 子ノードを取得します。target パラメータはノードの DOM オブジェクトを表します。 |
| getChecked | state | 選択されたノードを取得します。状態の指定可能な値は、'checked'、'unchecked'、'indeterminate' です。状態が指定されていない場合は、'checked' ノードを返します。 コード例:
var nodes = $('#tt').tree('getChecked'); // get checked nodes
var nodes = $('#tt').tree('getChecked', 'unchecked'); // get unchecked nodes
var nodes = $('#tt').tree('getChecked', 'indeterminate'); // get indeterminate nodes
var nodes = $('#tt').tree('getChecked', ['checked','indeterminate']); // get checked and indeterminate nodes
|
| getSelected | none | 選択されたノードを取得して返します。選択されたノードがない場合は null を返します。 |
| isLeaf | target | 指定されたノードをリーフノードとして定義します。target パラメータはノードの DOM オブジェクトを表します。 |
| find | id | 指定されたノードを見つけて、そのノードオブジェクトを返します。コード例:
// find a node and then select it
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 オブジェクトを表します。ノードが折りたたまれていて子ノードがない場合、ノードの id 値('id' という名前のパラメータ)がサーバーに送信され、子ノードデータを要求します。 |
| collapseAll | target | すべてのノードを折りたたみます。 |
| expandAll | target | すべてのノードを展開します。 |
| expandTo | target | ルートから指定されたノードを展開します。 |
| scrollTo | target | 指定されたノードまでスクロールします。このメソッドはバージョン 1.3.4 以降で使用できます。 |
| append | param | 親ノードに子ノードを追加します。param パラメータには2つのプロパティがあります: parent:DOM オブジェクト。追加先の親ノードです。指定されていない場合は、ルートノードとして追加されます。 data:配列。ノードのデータです。 コード例:
// append some nodes to the selected node
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 | ノードの展開/折りたたみ状態を切り替えます。target パラメータはノードの DOM オブジェクトを表します。 |
| insert | param | 指定されたノードの前または後ろにノードを挿入します。param パラメータには次のプロパティが含まれます: before:DOM オブジェクト。前に挿入するノードです。 after:DOM オブジェクト。後ろに挿入するノードです。 data:オブジェクト。ノードデータです。 次のコードは、選択されたノードの前に新しいノードを挿入する方法を示しています:
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 など。 コード例:
// update the selected node text
var node = $('#tt').tree('getSelected');
if (node){
$('#tt').tree('update', {
target: node.target,
text: 'new text'
});
}
|
| enableDnd | none | ドラッグ&ドロップ機能を有効にします。 |
| disableDnd | none | ドラッグ&ドロップ機能を無効にします。 |
| beginEdit | target | ノードの編集を開始します。 |
| endEdit | target | ノードの編集を終了します。 |
| cancelEdit | target | ノードの編集をキャンセルします。 |
jQuery EasyUI プラグイン その他の拡張