Biblioteca JavaScript de Webix a través de los ojos de un principiante. Parte 3. Módulos, diagramas, tablas de árbol.



Soy un desarrollador front-end principiante. Ahora estoy estudiando y entrenando en una empresa de TI de Minsk. Aprender los conceptos básicos de web-ui se lleva a cabo con la biblioteca Webix JS como ejemplo y quiero compartir mi modesta experiencia y guardarla como un pequeño tutorial para esta interesante biblioteca de interfaz de usuario.

Tercera tarea


Continúo desarrollando la funcionalidad de la aplicación creada usando la biblioteca Webix. En artículos anteriores, descubrí cómo crear una interfaz de aplicación y cómo interactuar con el formulario . En este artículo, considero las siguientes tareas:


El funcionamiento de los widgets Lista y Diseño se ha descrito en artículos anteriores.

Puede descargar el enlace de origen.

La aplicación terminada se puede encontrar aquí .

Paso 1. Dividiendo el proyecto en módulos


Para evitar confusiones en el código, es más confiable dividir el proyecto en módulos. Para hacer esto, crearé los siguientes archivos y transferiré el código del widget a ellos:

  • header.js: widget de la barra de herramientas ;
  • aside.js: widget de lista ;
  • table.js - tabla de datos del widget;
  • form.js - widget de formulario;
  • footer.js: un elemento con el texto: "El software es ...".

En los archivos nuevos, la descripción de las configuraciones de widgets se produce en una variable ...

const footer = { height: 30, template:"The software is provided by <a href='#'>webix.com</a>. All rights reserved (c)", css:"bottom-link" } 

Los archivos creados se incluyen en el archivo index.html en el siguiente orden:

 <body> <script src="functions.js"></script> <script src="users_module.js"></script> <script src="products_module.js"></script> <script src="data.js"></script> <script src="header.js"></script> <script src="table.js"></script> <script src="form.js"></script> <script src="aside.js"></script> <script src="footer.js"></script> <script src="script.js"></script> </body> 

Los módulos resultantes se combinan en un archivo script.js, que ahora contiene un código de inicialización de aplicación simple y conciso.

 webix.ui({ rows:[ header, { cols:[ aside, {view: "resizer"}, table, form ] }, footer ] }); 

Paso 2. Pestañas y cambiar entre ellas


En casos donde no hay suficiente espacio libre en la página, o si necesita separar temáticamente el contenido de la aplicación, es lógico usar pestañas.

El cambio entre pestañas se realiza mediante el componente Multiview . Este componente le permite crear la cantidad necesaria de pestañas en la aplicación y muestra solo una en un momento determinado.

Crearemos una vista múltiple en el archivo aside.js:

 const multi = { view: "multiview", cells:[ { id:"dashboard", cols:[table, form ] }, { id:"users", template:"Users" }, { id:"products", template:"Products" } ] } 

La matriz de celdas contiene el código para las pestañas. Cada pestaña debe agregarse con una identificación para poder acceder a ella y mostrarla. Ahora Multiview contiene tres pestañas, la primera de las cuales se mueve, creada antes de eso, la tabla y el formulario.

En el archivo script.js, reemplazo los widgets Table y Form con el módulo Multi.

 webix.ui({ rows:[ header, { cols:[ aside, {view: "resizer"}, /*table, form*/multi ] }, footer ] }); 

El widget Lista muestra el papel del cambio entre pestañas. Necesito abrir la pestaña correspondiente haciendo clic en sus elementos.

Para mayor comodidad, estableceré los elementos del widget Lista en la misma identificación que las pestañas de vista múltiple.

 const aside = { view: "list", id:"mylist", scroll:false, select:true, width:200, css:"list_color", data:[ {value:"Dashboard", id:"dashboard"}, {value:"Users", id:"users"}, {value:"Products", id:"products"} ], on:{ onAfterSelect:function(id){ $$(id).show(); } } } 

Cuando hace clic en un elemento del widget Lista , se activa onAfterSelect , dentro del controlador del cual obtenemos la identificación del elemento seleccionado y mostramos la pestaña del mismo nombre, accediendo por identificación; ellos, como recordarán, son los mismos.

Un ejemplo:



Importante!
Se realizarán más acciones de datos con el servidor local en ejecución.

Paso 3. Pestaña "Panel": configuración de la tabla


Hasta este punto, el proyecto utilizaba una tabla cuyos campos se generaban automáticamente. En el caso de que desee eliminar una columna o agregar una nueva, se utiliza la configuración de la tabla. Para hacer esto, en el widget Datatable , la propiedad autoConfig : true debe reemplazarse con la matriz de columnas con la configuración de cada columna.

 const table = { view:"datatable", id:"film_list", scroll:"y", select:true, url:"data/data.js", hover:"myhover", columns:[ { id:"rank", header:"", width:50, css:"rank"}, { id:"title", header:"Film title", fillspace:true}, { id:"year", header:"Released", width:100}, { id:"votes", header:"Votes", width:100}, { id:"rating", header:"Rating", width:100} ] } 

  • El valor de la propiedad id indica el campo del elemento de datos que se mostrará en esta columna;
  • la propiedad del encabezado en el elemento es el encabezado de la columna;
  • todas las columnas están configuradas en un ancho fijo, pero la segunda utiliza la propiedad de espacio de relleno, que permite que la columna del título ocupe todo el espacio libre.

La configuración personalizada de CSS se utiliza en la tabla: el desplazamiento se establece para las líneas y el fondo se cambia en la primera columna. Todas las configuraciones están predefinidas en el archivo style.css y solo necesita insertar el nombre de la clase.

Además, necesito más datos para la tabla, por lo que los cargaré desde data / data.js señalándolos con la propiedad url .

Resultado:



Paso 4. Pestaña "Usuarios": dibujar una lista y un diagrama


En la segunda pestaña, crearé una lista y un diagrama. Para hacer esto, en el segundo elemento Multiview indicaré el nombre del módulo: "usuarios".

 const multi = { view: "multiview", cells:[ { id:"dashboard", cols:[table, form ] }, { id:"users", rows:[users] }, { id:"products", template:"Products" } ] } 

Para los widgets, crearé un nuevo archivo users_module.js .

Lista Una lista se entiende como un widget de Lista ; anteriormente se usaba al crear el menú. Las líneas de la lista deben constar de nombres de usuario y nombres de países.

Listar código de widget:

 const users = { rows:[ { view: "list", id:"user_list", select:true, url:"data/users.js", template:"#name# from #country#" }, { template:"Chart" } ] } 

La matriz de filas se usa para dividir el espacio de trabajo en dos partes. La segunda parte se usará para el gráfico.

En la propiedad de plantilla, entre los signos #, se especifica un campo cuyo valor se toma del elemento de datos que se carga desde el archivo users.js.

Resultado:



Gráfico La biblioteca admite tipos de gráficos comunes: línea, círculo, radar, donut, columna, etc. Todos ellos son creados por el widget de gráfico . La forma en que se verá el gráfico define la propiedad de tipo .

Reemplazaré la template:”Chart” configuración de template:”Chart” con el código del widget:

 const users = { rows:[ { view: "list", id:"user_list", select:true, url:"data/users.js", template:"#name# from #country#" }, { view:"chart", type:"bar", value:"#age#", url:"data/users.js", xAxis:{ template:"#age#", title:"Age" } } ] } 

  • type: "bar" configuración type: "bar" establece el tipo de barra del gráfico;
  • el nombre del campo se pasa al valor y se indica necesariamente en `# ... #`. Esta es una característica del widget Gráfico;
  • la configuración de xAxis determina qué información se mostrará debajo del gráfico a lo largo del eje X;
  • la plantilla indica que debajo de las líneas del gráfico habrá dígitos de edad;
  • El título contiene el nombre del gráfico: "Age" .

El resultado de dibujar la lista y el gráfico:



Paso 5. Pestaña "Productos" - tabla de árbol


Para inicializar este componente, crearé el archivo products_module.js , y en el tercer elemento del widget Multiview indicaré el nombre del módulo "productos".

 const multi = { view: "multiview", cells:[ { id:"dashboard", cols:[table, form ] }, { id:"users", rows:[users] }, { id:"products", rows:[products] } ] } 

Para construir una tabla de árbol, use el widget Treetable . Una de las columnas del widget debe contener la plantilla requerida: {common.treetable ()} ; de lo contrario, obtendremos una tabla estándar en lugar de una vista de árbol. La plantilla le permite dibujar inmediatamente elementos característicos:

  • icono activo para contraer / expandir registros anidados;
  • iconos de archivo / carpeta;
  • sangría dependiendo del nivel de entradas.

 const products = { view:"treetable", scrollX:false, columns:[ { id:"id", header:"", width:50 }, { id:"value", header:"Title", fillspace:true, template:"{common.treetable()} #title#" }, { id:"price", header:"Price", width:200 } ], select:"row", url:"data/products.js" } 

El componente de tabla de árbol se rellena con datos jerárquicos, que obtendré del archivo products.js.

Resultado:



La aplicación resultante se puede encontrar aquí .

Generalización


Paso a paso, la aplicación se complementa con nuevas características. Una etapa importante fue la separación del código en módulos. La separación ayudó a evitar la confusión en el código y ayudó a organizar una interfaz de varias páginas. Fue interesante aprender nuevos widgets de Webix en forma de diagramas y listas de tablas libremente editables. Todo también fue simple, todo también es armonioso.

Source: https://habr.com/ru/post/486050/


All Articles