jQuery EasyUI Data Grid and Tree Plugin –Tree
Плагин jQuery EasyUI
Переопределите значения по умолчанию с помощью $.fn.tree.defaults.
Дерево отображает иерархические данные в виде древовидной структуры на веб-странице. Оно предоставляет пользователям функции развертывания, свертывания, перетаскивания, редактирования и асинхронной загрузки.
Зависимости
- draggable
- droppable
Использование
Дерево определяется в элементе <ul>. Этот тег может определять листовые узлы и дочерние узлы. Узлы будут элементами <li> внутри списка ul. Далее показаны элементы, используемые для создания узлов дерева, вложенных в элемент 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>
Дерево также можно определить в пустом элементе <ul>, а данные можно загрузить с помощью JavaScript.
<ul id="tt"></ul>
$('#tt').tree({
url:'tree_data.json'
});
Используйте loadFilter для обработки данных JSON из веб-службы ASP.NET.
$('#tt').tree({
url: ...,
loadFilter: function(data){
if (data.d){
return data.d;
} else {
return data;
}
}
});
Формат данных дерева
Каждый узел может содержать следующие свойства:
- 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'. Дочерние узлы загружаются в зависимости от состояния родительского узла. Когда свёрнутый узел разворачивается, если для него не загружено ни одного дочернего узла, он отправляет значение id узла на сервер через URL, определённый выше, в качестве параметра HTTP-запроса с именем 'id' для получения дочерних узлов.
Посмотрите на данные, возвращённые сервером:
[{
"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) будет отправлено на сервер для получения дочерних узлов.
В этом руководстве,Создание асинхронного деревапоказывает, как написать серверный код для возврата данных дерева по запросу.
Свойства
| Name | Type | Описание | Значение по умолчанию |
|---|---|---|---|
| url | string | URL для получения удалённых данных. | null |
| method | string | HTTP-метод, используемый для получения данных. | post |
| animate | логическое значение | Определяет, показывать ли анимационные эффекты при развёртывании или сворачивании узла. | false |
| checkbox | логическое значение | Определяет, отображать ли флажок перед каждым узлом. | false |
| cascadeCheck | логическое значение | Определяет, включать ли каскадные проверки. | истина |
| onlyLeafCheck | логическое значение | Определяет, отображать ли флажки только перед листовыми узлами. | false |
| lines | логическое значение | Определяет, показывать ли линии дерева. | false |
| dnd | логическое значение | Определяет, включать ли перетаскивание. | 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 |
| loadFilter | function(data,parent) | Возвращает отфильтрованные данные для отображения. Данные возвращаются в стандартном древовидном формате. Эта функция имеет следующие параметры: data: необработанные данные для загрузки. parent: DOM-объект, представляющий родительский узел. |
Events
Многие функции обратного вызова событий требуют параметр 'node', который включает следующие свойства:
- id: значение идентификатора, привязанное к узлу.
- text: текст для отображения.
- iconCls: CSS-класс, используемый для отображения иконки.
- checked: отмечен ли узел.
- state: состояние узла, 'open' или 'closed'.
- attributes: пользовательские свойства, привязанные к узлу.
- target: целевой DOM-объект.
| Name | Parameters | Описание |
|---|---|---|
| onClick | узел | Срабатывает, когда пользователь кликает по узлу. Пример кода:
$('#tt').tree({
onClick: function(node){
alert(node.text); // alert node text property when clicked
}
});
|
| onDblClick | узел | Срабатывает, когда пользователь дважды кликает по узлу. |
| onBeforeLoad | node, param | Срабатывает перед отправкой запроса на загрузку данных; верните false, чтобы отменить действие загрузки. |
| onLoadSuccess | node, data | Срабатывает при успешной загрузке данных. |
| onLoadError | аргументы | Срабатывает при неудачной загрузке данных; параметр arguments совпадает с функцией 'error' из jQuery.ajax. |
| onBeforeExpand | узел | Срабатывает перед разворачиванием узла; верните false, чтобы отменить действие разворачивания. |
| onExpand | узел | Срабатывает, когда узел разворачивается. |
| onBeforeCollapse | узел | Срабатывает до сворачивания узла; верните false, чтобы отменить действие сворачивания. |
| onCollapse | узел | Срабатывает при сворачивании узла. |
| onBeforeCheck | node, checked | Срабатывает перед тем, как пользователь щёлкнет флажок; верните false, чтобы отменить действие отметки. Это событие доступно начиная с версии 1.3.1. |
| onCheck | node, checked | Срабатывает, когда пользователь щёлкает флажок. |
| onBeforeSelect | узел | Срабатывает до выбора узла; верните false, чтобы отменить действие выбора. |
| onSelect | узел | Срабатывает при выборе узла. |
| 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 | узел | Срабатывает, когда начинается перетаскивание узла; return false, чтобы запретить перетаскивание. Это событие доступно начиная с версии 1.3.2. |
| onStartDrag | узел | Срабатывает, когда узел начинает перетаскиваться. Это событие доступно начиная с версии 1.3.2. |
| onStopDrag | узел | Срабатывает, когда перетаскивание узла останавливается. Это событие доступно начиная с версии 1.3.2. |
| onDragEnter | target, source | Срабатывает, когда узел перетаскивается над допустимым целевым узлом сброса; return false, чтобы запретить сброс. target: целевой элемент узла, на который выполняется сброс. source: исходный узел, который перетаскивается. Это событие доступно начиная с версии 1.3.2. |
| onDragOver | target, source | Срабатывает, когда узел перетаскивается на допустимый целевой узел сброса; return 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 | узел | Срабатывает перед редактированием узла. |
| onAfterEdit | узел | Срабатывает после редактирования узла. |
| onCancelEdit | узел | Срабатывает при отмене действия редактирования. |
Методы
| Name | Parameters | Описание |
|---|---|---|
| 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'. Пример кода:
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-объект узла. |
| найти | 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 имеет два свойства: 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 Plugin Другие расширения