Biblioteca Webix JavaScript através dos olhos de um iniciante. Parte 3. Módulos, diagramas, tabelas em árvore



Sou desenvolvedor iniciante em front-end. Agora estou estudando e treinando em uma empresa de TI em Minsk. Aprender o básico do web-ui ocorre com a biblioteca JS Webix como exemplo e quero compartilhar minha experiência modesta e salvá-la como um pequeno tutorial para esta interessante biblioteca da interface do usuário.

Terceira tarefa


Continuo desenvolvendo a funcionalidade do aplicativo criado usando a biblioteca Webix. Em artigos anteriores, descobri como criar uma interface de aplicativo e como interagir com o formulário . Neste artigo, considero as seguintes tarefas:


A operação dos widgets Lista e Layout foi descrita em artigos anteriores.

Você pode baixar o link de origem.

O aplicativo finalizado pode ser encontrado aqui .

Etapa 1. Dividindo o projeto em módulos


Para evitar confusão no código, é mais confiável dividir o projeto em módulos. Para fazer isso, vou criar os seguintes arquivos e transferir o código do widget para eles:

  • header.js - widget da barra de ferramentas;
  • apart.js - Widget de lista ;
  • table.js - widget Datatable;
  • form.js - widget de formulário;
  • footer.js - um elemento com o texto: "O software é ...".

Em novos arquivos, a descrição das configurações do widget ocorre em uma variável ...

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

Os arquivos criados estão incluídos no arquivo index.html na seguinte ordem:

 <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> 

Os módulos resultantes são combinados em um arquivo script.js, que agora contém um código de inicialização de aplicativo simples e conciso.

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

Etapa 2. Abas e alternando entre elas


Nos casos em que não há espaço livre suficiente na página ou se você precisar separar tematicamente o conteúdo do aplicativo, é lógico usar guias.

A alternância entre guias é realizada pelo componente Multiview . Este componente permite criar o número necessário de guias no aplicativo e exibe apenas uma em um determinado momento.

Criaremos uma visualização múltipla no arquivo apart.js:

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

A matriz de células contém o código para as guias. Cada guia precisa ser adicionada com um ID para que possa ser acessada e exibida. Agora, a Multiview contém três guias, a primeira das quais é movida, criada antes disso, a tabela e o formulário.

No arquivo script.js, substituo os widgets Tabela e Formulário pelo módulo Multi.

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

O papel da alternância entre guias é desempenhado pelo widget Lista . Eu preciso da guia correspondente para abrir clicando em seus elementos.

Por conveniência, definirei os elementos do widget Lista com o mesmo ID que as guias de múltiplas visualizações.

 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(); } } } 

Quando você clica em um elemento do widget Lista , onAfterSelect é acionado, dentro do manipulador do qual obtemos o ID do elemento selecionado e mostramos a guia com o mesmo nome, acessando-o por id - eles, como você se lembra, são os mesmos.

Um exemplo:



Importante!
Ações de dados adicionais serão realizadas com o servidor local em execução.

Etapa 3. Guia "Painel" - configuração da tabela


Até esse momento, o projeto usava uma tabela cujos campos eram gerados automaticamente. No caso em que você deseja excluir uma coluna ou adicionar uma nova, as configurações da tabela são usadas. Para fazer isso, no widget Datatable , a propriedade autoConfig : true deve ser substituída pela matriz de colunas pelas configurações de cada coluna.

 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} ] } 

  • O valor da propriedade id indica o campo do item de dados que será exibido nesta coluna;
  • a propriedade do cabeçalho no elemento é o cabeçalho da coluna;
  • todas as colunas estão definidas para uma largura fixa, mas a segunda usa a propriedade fillspace, que permite que a coluna de título ocupe todo o espaço livre.

As configurações CSS personalizadas são usadas na tabela: o foco é definido para as linhas e o plano de fundo é alterado na primeira coluna. Todas as configurações são predefinidas no arquivo style.css e você só precisa inserir o nome da classe.

Além disso, preciso de mais dados para a tabela, para carregá-los em data / data.js, apontando para ela usando a propriedade url .

Resultado:



Etapa 4. Guia "Usuários" - desenhando uma lista e um diagrama


Na segunda guia, vou criar uma lista e um diagrama. Para fazer isso, no segundo elemento Multiview, indicarei o nome do módulo - "usuários".

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

Para os próprios widgets, criarei um novo arquivo users_module.js .

List . Uma lista é entendida como um widget de Lista ; anteriormente, ela era usada na criação do menu. As linhas da lista devem consistir em nomes de usuários e nomes de países.

Código do widget da lista:

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

A matriz de linhas é usada para dividir o espaço de trabalho em duas partes. A segunda parte será usada para o gráfico.

Na propriedade do modelo, entre os # sinais, é especificado um campo cujo valor é obtido do elemento de dados carregado no arquivo users.js.

Resultado:



Gráfico . A biblioteca suporta tipos comuns de gráficos : linha, círculo, radar, rosca, coluna etc. Todos eles são criados pelo widget de gráfico . A aparência do gráfico define a propriedade type .

Substituirei a configuração do template:”Chart” pelo código do 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" configuração type: "bar" define o tipo de barra do gráfico;
  • o nome do campo é passado para o valor e é indicado necessariamente em `# ... #`. Esse é um recurso do widget Gráfico;
  • a configuração xAxis determina quais informações serão exibidas abaixo do gráfico ao longo do eixo X;
  • O modelo indica que, sob as linhas do gráfico, haverá dígitos de idade;
  • title contém o nome do gráfico - "Age" .

O resultado do desenho da lista e do gráfico:



Etapa 5. Guia "Produtos" - tabela em árvore


Para inicializar esse componente, criarei o arquivo products_module.js e, no terceiro elemento do widget Multiview, indicarei o nome do módulo "produtos".

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

Para criar uma tabela em árvore, use o widget Treetable . Uma das colunas do widget deve conter o modelo necessário - {common.treetable ()} , caso contrário, obteremos uma tabela padrão em vez de uma exibição em árvore. O modelo permite desenhar imediatamente elementos característicos:

  • ícone ativo para recolher / expandir registros aninhados;
  • ícones de arquivo / pasta;
  • recuo dependendo do nível 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" } 

O componente treetable é preenchido com dados hierárquicos, que eu obterei do arquivo products.js.

Resultado:



O aplicativo resultante pode ser encontrado aqui .

Generalização


Passo a passo, o aplicativo é complementado por novos recursos. Um estágio importante foi a separação do código em módulos. A separação ajudou a evitar confusão no código e a organizar uma interface de várias páginas. Foi interessante aprender novos widgets Webix na forma de diagramas e listas de tabelas editáveis ​​livremente. Tudo também era simples, tudo também é harmonioso.

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


All Articles