jQuery EasyUI Data Grid and Tree Plugin –Tree


jQuery EasyUI 插件Плагин 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 插件jQuery EasyUI Plugin Другие расширения