jQuery EasyUI DataGrid y plugin de árbol -Tree (árbol)
Plugin de jQuery EasyUI
Reescriba los defaults predeterminados mediante $.fn.tree.defaults.
El árbol (tree) muestra datos jerárquicos en una estructura de árbol en la página web. Proporciona al usuario funcionalidades de expandir, contraer, arrastrar, editar y carga asíncrona.
Dependencias
- draggable
- droppable
Uso
El árbol (tree) se define en un elemento <ul>. Esta etiqueta puede definir nodos hoja y nodos hijos. Los nodos serán elementos <li> dentro de la lista ul. A continuación se muestran los elementos que se usarán para crear nodos de árbol anidados dentro de un elemento 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>
El árbol (Tree) también puede definirse en un elemento <ul> vacío, y se pueden cargar datos usando javascript.
<ul id="tt"></ul>
$('#tt').tree({
url:'tree_data.json'
});
Use loadFilter para procesar datos json provenientes de un servicio web ASP.NET.
$('#tt').tree({
url: ...,
loadFilter: function(data){
if (data.d){
return data.d;
} else {
return data;
}
}
});
Formato de datos del árbol (Tree Data Format)
Cada nodo puede incluir las siguientes propiedades:
- id: el id del nodo, que es importante para cargar datos remotos.
- text: el texto del nodo a mostrar.
- state: el estado del nodo, 'open' o 'closed', por defecto es 'open'. Cuando se establece en 'closed', el nodo tiene nodos hijos, y se cargarán desde un sitio remoto.
- checked: indica si el nodo está seleccionado.
- attributes: atributos personalizados agregados a un nodo.
- children: una matriz de nodos que define algunos nodos hijos.
Ejemplo:
[{
"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#"
}]
}]
Árbol asíncrono
El árbol admite un modo de carga asíncrona incorporado, por lo que el usuario puede crear un árbol vacío y luego especificar un lado del servidor que devuelva datos JSON dinámicamente, para llenar el árbol asincrónicamente según sea necesario. A continuación se muestra un ejemplo:
<ul class="easyui-tree" data-options="url:'get_data.php'"></ul>
El árbol se carga a través de la URL 'get_data.php'. Los nodos hijos se cargan dependiendo del estado del nodo padre. Cuando se expande un nodo cerrado, si el nodo no tiene nodos hijos cargados, enviará al servidor el valor de id del nodo como parámetro de solicitud http llamado 'id' mediante la URL definida anteriormente, para recuperar los nodos hijos.
Vea los datos devueltos desde el servidor:
[{
"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"
}]
El nodo 1 y el nodo 2 están cerrados; al expandir el nodo 1, se mostrarán directamente sus nodos hijos. Al expandir el nodo 2, se enviará value(2) al servidor para recuperar los nodos hijos.
En este tutorial,Crear un árbol asíncronose demuestra cómo escribir código de servidor para devolver los datos del árbol según sea necesario.
Propiedades
| Nombre | Tipo | Descripción | Valor por defecto |
|---|---|---|---|
| url | string | URL para obtener datos remotos. | null |
| method | string | Método http (method) para recuperar datos. | post |
| animate | boolean | Define si se muestra un efecto de animación al expandir o contraer un nodo. | false |
| checkbox | boolean | Define si se muestra una casilla de verificación delante de cada nodo. | false |
| cascadeCheck | boolean | Define si se realiza la comprobación en cascada. | true |
| onlyLeafCheck | boolean | Define si se muestran casillas de verificación solo delante de los nodos hoja. | false |
| lines | boolean | Define si se muestran las líneas del árbol. | false |
| dnd | boolean | Define si se habilita arrastrar y soltar. | false |
| data | array | Datos de nodo a cargar.
$('#tt').tree({
data: [{
text: 'Item1',
state: 'closed',
children: [{
text: 'Item11'
},{
text: 'Item12'
}]
},{
text: 'Item2'
}]
});
|
null |
| formatter | function(node) | Define cómo se presenta el texto del nodo. Ejemplo de código:
$('#tt').tree({
formatter:function(node){
return node.text;
}
});
|
|
| loader | function(param,success,error) | Define cómo cargar datos desde un servidor remoto. Devolver false cancela la acción. Esta función tiene los siguientes parámetros: param: el objeto de parámetros que se pasará al servidor remoto. success(data): función de devolución de llamada que se invoca cuando los datos se recuperan correctamente. error(): función de devolución de llamada que se invoca cuando falla la recuperación de datos. |
json loader |
| loadFilter | function(data,parent) | Devuelve los datos filtrados que se mostrarán. Los datos se devuelven en formato de árbol estándar. Esta función tiene los siguientes parámetros: data: los datos originales a cargar. parent: objeto DOM que representa el nodo padre. |
Eventos
Muchas funciones de devolución de llamada de eventos requieren el parámetro 'node', que incluye las siguientes propiedades:
- id: valor de identificación enlazado al nodo.
- text: texto a mostrar.
- iconCls: clase CSS utilizada para mostrar el icono.
- checked: si el nodo está seleccionado.
- state: estado del nodo, 'open' o 'closed'.
- attributes: atributos personalizados enlazados al nodo.
- target: objeto DOM del destino.
| Nombre | Parámetros | Descripción |
|---|---|---|
| onClick | node | Se activa cuando el usuario hace clic en un nodo. Ejemplo de código:
$('#tt').tree({
onClick: function(node){
alert(node.text); // alert node text property when clicked
}
});
|
| onDblClick | node | Se activa cuando el usuario hace doble clic en un nodo. |
| onBeforeLoad | node, param | Se activa antes de que se realice la solicitud de carga de datos; devolver false cancela la acción de carga. |
| onLoadSuccess | node, data | Se activa cuando los datos se cargan correctamente. |
| onLoadError | arguments | Se activa cuando falla la carga de datos; el parámetro arguments es igual que la función 'error' de jQuery.ajax. |
| onBeforeExpand | node | Se activa antes de expandir un nodo; devolver false cancela la acción de expandir. |
| onExpand | node | Se activa cuando un nodo se expande. |
| onBeforeCollapse | node | Se activa antes de contraer un nodo; devolver false cancela la acción de contraer. |
| onCollapse | node | Se activa cuando un nodo se contrae. |
| onBeforeCheck | node, checked | Se activa antes de que el usuario haga clic en una casilla de verificación; devolver false cancela la acción de selección. Este evento está disponible desde la versión 1.3.1. |
| onCheck | node, checked | Se activa cuando el usuario hace clic en una casilla de verificación. |
| onBeforeSelect | node | Se activa antes de que un nodo sea seleccionado; devolver false cancela la acción de selección. |
| onSelect | node | Se activa cuando un nodo es seleccionado. |
| onContextMenu | e, node | Se activa al hacer clic derecho en un nodo. Ejemplo de código:
// 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 | Se activa cuando comienza el arrastre de un nodo; devolver false impide el arrastre. Este evento está disponible desde la versión 1.3.2. |
| onStartDrag | node | Se activa cuando se comienza a arrastrar un nodo. Este evento está disponible desde la versión 1.3.2. |
| onStopDrag | node | Se activa cuando se detiene el arrastre de un nodo. Este evento está disponible desde la versión 1.3.2. |
| onDragEnter | target, source | Se activa cuando un nodo se arrastra dentro de un nodo de destino donde se permite soltar; devolver false impide la colocación. target: elemento del nodo de destino donde se coloca. source: nodo de origen que se arrastra. Este evento está disponible desde la versión 1.3.2. |
| onDragOver | target, source | Se activa cuando un nodo se arrastra sobre un nodo de destino donde se permite soltar; devolver false impide la colocación. target: elemento del nodo de destino donde se coloca. source: nodo de origen que se arrastra. Este evento está disponible desde la versión 1.3.2. |
| onDragLeave | target, source | Se activa cuando un nodo se arrastra fuera de un nodo de destino donde se permite soltar. target: elemento del nodo de destino donde se coloca. source: nodo de origen que se arrastra. Este evento está disponible desde la versión 1.3.2. |
| onBeforeDrop | target,source,point | Se activa antes de que un nodo sea colocado; devolver false impide la colocación. target: objeto DOM, nodo de destino de la colocación. source: nodo de origen. point: representa la operación de colocación; los valores posibles son: 'append', 'top' o 'bottom'. Este evento está disponible desde la versión 1.3.2. |
| onDrop | target,source,point | Se activa cuando un nodo es colocado.
target: objeto DOM, nodo de destino de la colocación. source: nodo de origen. point: representa la operación de colocación; los valores posibles son: 'append', 'top' o 'bottom'. |
| onBeforeEdit | node | Se activa antes de editar un nodo. |
| onAfterEdit | node | Se activa después de editar un nodo. |
| onCancelEdit | node | Se activa cuando se cancela la acción de edición. |
Métodos
| Nombre | Parámetros | Descripción |
|---|---|---|
| options | none | Devuelve las opciones (options) del árbol. |
| loadData | data | Carga los datos del árbol. |
| getNode | target | Obtiene el objeto de nodo especificado. |
| getData | target | Obtiene los datos del nodo especificado, incluidos sus nodos hijos. |
| reload | target | Recarga los datos del árbol. |
| getRoot | none | Obtiene el nodo raíz y devuelve el objeto de nodo. |
| getRoots | none | Obtener el nodo raíz, devuelve un array de nodos. |
| getParent | target | Obtener el nodo padre, el parámetro target representa el objeto DOM del nodo. |
| getChildren | target | Obtener los nodos hijos, el parámetro target representa el objeto DOM del nodo. |
| getChecked | state | Obtener los nodos seleccionados. Los valores de estado disponibles son: 'checked', 'unchecked', 'indeterminate'. Si no se asigna un estado, se devuelven los nodos 'checked'. Ejemplo de código:
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 | Obtener el nodo seleccionado y devolverlo; si no hay ningún nodo seleccionado, devuelve null. |
| isLeaf | target | Definir el nodo especificado como nodo hoja, el parámetro target representa el objeto DOM del nodo. |
| find | id | Encontrar el nodo especificado y devolver el objeto del nodo. Ejemplo de código:
// find a node and then select it
var node = $('#tt').tree('find', 12);
$('#tt').tree('select', node.target);
|
| select | target | Seleccionar un nodo, el parámetro target representa el objeto DOM del nodo. |
| check | target | Marcar el nodo especificado como seleccionado (checked). |
| uncheck | target | Marcar el nodo especificado como no seleccionado (unchecked). |
| collapse | target | Contraer un nodo, el parámetro target representa el objeto DOM del nodo. |
| expand | target | Expandir un nodo, el parámetro target representa el objeto DOM del nodo. Cuando el nodo está cerrado y no tiene nodos hijos, el valor id del nodo (el parámetro llamado 'id') se enviará al servidor para solicitar los datos de los nodos hijos. |
| collapseAll | target | Contraer todos los nodos. |
| expandAll | target | Expandir todos los nodos. |
| expandTo | target | Expandir un nodo especificado desde la raíz. |
| scrollTo | target | Desplazarse hasta el nodo especificado. Este método está disponible desde la versión 1.3.4. |
| append | param | Añadir algunos nodos hijos a un nodo padre, el parámetro param tiene dos propiedades: parent: objeto DOM, el nodo padre al que se añadirán; si no se asigna, se añaden como nodos raíz. data: array, los datos de los nodos. Ejemplo de código:
// 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 | Alternar el estado expandido/contraído de un nodo, el parámetro target representa el objeto DOM del nodo. |
| insert | param | Insertar un nodo antes o después del nodo especificado, el parámetro param incluye las siguientes propiedades: before: objeto DOM, el nodo insertado antes. after: objeto DOM, el nodo insertado después. data: objeto, los datos del nodo. El siguiente código demuestra cómo insertar un nuevo nodo antes del nodo seleccionado:
var node = $('#tt').tree('getSelected');
if (node){
$('#tt').tree('insert', {
before: node.target,
data: {
id: 21,
text: 'node text'
}
});
}
|
| remove | target | Eliminar un nodo y sus nodos hijos, el parámetro target representa el objeto DOM del nodo. |
| pop | target | Extraer (pop) un nodo y sus nodos hijos. Este método es igual que remove, pero devuelve los datos del nodo eliminado. |
| update | param | Actualizar el nodo especificado, el parámetro 'param' tiene las siguientes propiedades: target (objeto DOM, el nodo a actualizar), id, text, iconCls, checked, etc. Ejemplo de código:
// update the selected node text
var node = $('#tt').tree('getSelected');
if (node){
$('#tt').tree('update', {
target: node.target,
text: 'new text'
});
}
|
| enableDnd | none | Habilitar la función de arrastrar y soltar. |
| disableDnd | none | Deshabilitar la función de arrastrar y soltar. |
| beginEdit | target | Iniciar la edición del nodo. |
| endEdit | target | Finalizar la edición del nodo. |
| cancelEdit | target | Cancelar la edición del nodo. |
Complemento jQuery EasyUI Otras extensiones