UNPKG

jquery-toad

Version:

jQuery TOAD - O velho e querido jQuery

295 lines (294 loc) 22.5 kB
<!DOCTYPE html> <html lang="pt-br"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no"> <meta http-equiv="X-UA-Compatible" content="ie=edge"> <title>jQuery TOAD</title> <link rel="icon" href="images/jquery-toad-icon.png"> <link rel="stylesheet" href="https://unpkg.com/bootstrap@4.1.2/dist/css/bootstrap.css"> <link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.1.0/css/all.css"> <link rel="stylesheet" href="https://unpkg.com/highlightjs@9.10.0/styles/github-gist.css"> <link rel="stylesheet" href="style/toad.css"> <script> var __TOAD__ = 'TOAD'; </script> </head> <body data-controller="main"> <main role="main"> <div class="container"> <div class="toad-main-box bg-light border-dark"> <div class="toad-logo-box"><img class="img-fluid" src="images/jquery-toad-logo.png" alt="Logo jQuery TOAD"></div> <nav class="navbar navbar-expand-lg navbar-dark bg-dark"><a class="navbar-brand" href="index.html">Home</a> <button class="navbar-toggler" type="button" data-toggle="collapse" data-target="#main-menu" aria-controls="main-menu" aria-expanded="false" aria-label="Alterna navegação"><span class="navbar-toggler-icon"></span></button> <div class="collapse navbar-collapse" id="main-menu"> <ul class="navbar-nav mr-auto"> <li class="nav-item active"><a class="nav-link" href="motivacao.html">Qual a motivação?</a></li> <li class="nav-item dropdown"><a class="nav-link dropdown-toggle" href="#" id="submenu-documentacao" role="button" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">Documentação</a> <div class="dropdown-menu" aria-labelledby="submenu-documentacao"> <h6 class="dropdown-header">TUTORIAIS</h6><a class="dropdown-item" href="tutorial-quickstart.html">Guia de início rápido</a><a class="dropdown-item" href="tutorial-mvc.html">O padrão MVC</a> <div class="dropdown-divider"></div> <h6 class="dropdown-header">CONCEITOS</h6><a class="dropdown-item" href="conceito-variavel-toad.html">A variável <kbd>__TOAD__</kbd></a><a class="dropdown-item" href="conceito-modulo.html">Modularização</a><a class="dropdown-item" href="conceito-componente.html">Componentes</a><a class="dropdown-item" href="conceito-utilitario.html">Utilitários</a><a class="dropdown-item" href="conceito-configuracao.html">Configurações</a><a class="dropdown-item" href="conceito-constante.html">Constantes</a> </div> </li> </ul> </div> </nav> <div class="toad-content-box col-md-10 offset-md-1"> <h1 class="display-4 text-center">Guia de início rápido</h1> <p class="lead"> Neste tutorial rápido, nós iremos construir uma aplicação jQuery com o auxílio da biblioteca jQuery TOAD. </p> <blockquote class="blockquote"> Trata-se de uma página que contém um botão para exibir uma mensagem pré-definida como alerta, e outro botão que exibe a mesma mensagem, porém como o texto de um elemento <code>h1</code>. </blockquote> <p class="lead"> É bem simples, mas servirá para exemplificar nossa proposta. Em outros tutoriais nós iremos evoluir pra algo melhor, de acordo com que formos introduzindo novos conceitos. </p> <p class="lead"> Lembrando que, o que chamamos aqui de <i>jQuery TOAD</i> é o conjunto da biblioteca JavaScript mais essa documentação. Porque não se trata apenas de código, mas de conceitos para desenvolvimento de aplicações usando jQuery. </p> <h2>Criando o código inicial</h2> <p class="lead">Crie um arquivo <code>index.html</code> com o seguinte conteúdo:</p> <div data-gui="code-block" data-lang="html" data-file-path="samples/tutorial/quickstart/index.html"></div> <p class="lead">Crie também um arquivo <code>my-controller.js</code> com o seguinte conteúdo:</p> <div data-gui="code-block" data-lang="js" data-file-path="samples/tutorial/quickstart/my-controller.js"></div> <p class="lead"> Isso é tudo o que precisamos. Abra o arquivo <code>index.html</code> em seu navegador preferido e você verá dois botões: </p> <p class="lead"> Clicando no primeiro um alerta exibirá a mensagem <i>"Olá mundo jQuery TOAD!"</i>. Clicando no segundo a mesma mensagem será atribuída a um título <code>h1</code> logo abaixo dos botões na própria página. </p> <blockquote class="blockquote">Na verdade a mensagem será apresentada em um segundo <code>h1</code>, porque já existirá um contendo o texto <i>"A mensagem virá aqui em baixo:"</i>.</blockquote> <div data-gui="demo" data-file-path="samples/tutorial/quickstart/index.html"></div> <h2>Entendendo os conceitos básicos</h2> <p class="lead"> Após você experimentar a aplicação funcionando em seu navegador, e ver com os próprios olhos a jQuery TOAD em ação, vamos agora entender algums conceitos básicos. </p> <p class="lead"> O que construímos em termos de aplicação não é tão útil assim, porém é mínimo o suficiente pra falarmos dos conceitos que queremos propor com o uso dessa biblioteca ao desenvolver aplicações jQuery. </p> <h4>1. Não misture HTML com JavaScript</h4> <p class="lead"> Com exceção das linhas de <code>6 a 8</code> no aquivo <code>index.html</code> (iremos falar sobre isso logo abaixo) não temos código JavaScript misturado com HTML (isso também se aplica pra código CSS). </p> <div data-gui="code-block" data-lang="html" data-file-path="samples/tutorial/quickstart/index.html" data-line-begin="6" data-line-end="8"></div> <p class="lead">Isso também é percebido nas linhas <code>12 e 13</code> também do arquivo <code>index.html</code>:</p> <div data-gui="code-block" data-lang="html" data-file-path="samples/tutorial/quickstart/index.html" data-line-begin="12" data-line-end="13"></div> <p class="lead"> Aqui ao invés de usar a propriedade HTML <code>onclick</code> <i>(que é específica para o fim)</i> nós usamos uma sintaxe um pouco diferente que é fornecida pela biblioteca jQuery TOAD. A vantagem dessa sobre a <code>onclick</code>, é que na <code>onclick</code> nós precisamos incluir código JavaScript, e nessa segunda abordagem na verdade o que estamos fazendo é informando que um evento chamado <code>onClickMessage</code> deve ser acionado ao ocorrer o evento <code>onclick</code> nativo do elemento HTML em si. Mas não informamos um código, porque o mesmo é definido por quem controla essa visão, no caso estamos falando do arquivo <code>my-controller.js</code>. </p> <p class="lead"> Todo o código JavaScript em sí é carregado de arquivos específicos. Veja isso nas linhas de <code>16 a 18</code> no arquivo <code>index.html</code>. </p> <div data-gui="code-block" data-lang="html" data-file-path="samples/tutorial/quickstart/index.html" data-line-begin="16" data-line-end="18"></div> <p class="lead"> O resultado disso é que seus arquivos ficam muito mais legíveis. É muito mais fácil você trabalhar nesse arquivo sabendo que o que está contido nele é puramente código HTML. </p> <h4>2. Controle sua visão</h4> <p class="lead"> Quando apresentamos a primeira regra, <strong>1 - Não misture HTML com JavaScript</strong>, o que queremos dizer é muito mais amplo, queremos dizer: <strong><i>"Não misture, mas separe as coisas"</i></strong>. </p> <p class="lead"> Separe o que é código de apresentação (a visão do usuário), ou seja, o próprio HTML, do código que controla a sua aplicação, isso é o seu código JavaScript. </p> <p class="lead"> Esse é o princípio do <i>MVC (Model, View e Controller - Modelo, Visão e Controlador)</i> (<a href="conceito-mvc.html">saiba mais sobre MVC nesse artigo</a>), e nós propomos o uso desse conceito para desenvolver suas aplicações jQuery. A biblioteca jQuery TOAD te ajuda a fazer isso. </p> <p class="lead">Veja que na linha <code>11</code> do <code>arquivo index.html</code> anotamos algo na tag <code>body,</code>:</p> <div data-gui="code-block" data-lang="html"><!--[CDATA[<body data-controller="my">]]--></div> <p class="lead"> Com isso jQuery TOAD já sabe ligar esse elemento HTML <code>body</code> a um objeto JavaScript correspondente, neste caso identificado por <code>my</code>. </p> <h4>3. Seja semântico</h4> <p class="lead"> Ser semântico é dar e observar a <i>"significação"</i> das coisas. É o que chamo de: <strong><i>"uma coisa é uma coisa, outra coisa é outra coisa"</i></strong>. </p> <p class="lead"> No arquivo <code>index.html</code>, na linha <code>15</code>, nós identificamos o elemento <code>h1</code> com um dado personalizado <code>data-id="message"</code>, isso é uma marca que estamos fazendo para encontrar este item mais tarde por nossa controller, no caso para saber onde apresentar o texto da mensagem. </p> <div data-gui="code-block" data-lang="html"><!--[CDATA[<h1 data-id="message"></h1>]]--></div> <P class="lead">Muitos de nós já estamos acostumados a fazer isso usando a propriedade <code>id</code>, o que ficaria assim:</P> <div data-gui="code-block" data-lang="html"><!--[CDATA[<h1 id="message"></h1>]]--></div> <p class="lead">Outros ainda usam uma classe, o que ficaria assim:</p> <div data-gui="code-block" data-lang="html"><!--[CDATA[<h1 class="message"></h1>]]--></div> <blockquote class="blockquote"> Na verdade, já que estamos falando de semântica, o ideal aqui seria usar a propriedade <code>id</code> para tal, ao invés de <code>data-id</code>. Mais tarde em outro tutorial estaremos vendo porque usar <code>id</code> não é o ideal, por agora só peço que entenda que <code>data-id="message"</code> é a nossa forma de marcar um elemento para identificá-lo mais tarde. </blockquote> <p class="lead"> O não tão ideal seria usar a propriedade <code>class</code>, que apesar de servir para identificação, ou seja para classificar elementos, nós a usamos muito mais para identificar elementos para uso em estilos CSS, então deixamos assim: </p> <ul class="lead"> <li>Quando temos um <code>class="message"</code> podemos inferir que isso identifica um elemento para fins de apresentação;</li> <li>Quando temos um <code>data-id="message"</code> podemos inferir que isso identifica um elemento para fins de controle de aplicação;</li> </ul> <p class="lead"> Com isso deixamos claro que <i>"uma coisa é uma coisa"</i> e <i>"outra coisa é outra coisa"</i>. E o mais importante é que isso não infringe as regras de semântica do HTML, porque o atributo <code>data-*</code> está aí justamente para acoplar dados personalizados a nossos elementos, só o que estamos fazendo é usando-os para o que são feitos. </p> <h4>4. Modularize</h4> <p class="lead"> Seja para o reaproveitamento de código, para a segurança de código (um código não interferir no funcionamento de oturo), para a organização (cada coisa no seu lugar), ou simplesmente para a simplicidade (é muito mais fácil ler o código pequeno de uma controller, do que achar o trecho responsável pela controller num arquivo gigante de aplicação). </p> <p class="lead"> Qualquer que seja o seu propósito, modularizar é o princípio de tudo, e logo na linha <code>1</code> do arquivo <code>my-controller.js</code> nós temos a jQuery TOAD nos ajudando com isso: </p> <div data-gui="code-block" data-lang="js"><!--[CDATA[MYAPP.namespace('controllers', function () {]]--></div> <p class="lead"> Primeiramente nós temos esse objeto global <code>MYAPP</code>. Esse deve ser o único objeto global que sua aplicação "pendura" na <code>window</code>. </p> <p class="lead">Lembra quando falei no item 1: ... <i>"Com exceção das linhas de 6 a 8 no aquivo index.html..."</i></p> <div data-gui="code-block" data-lang="html" data-file-path="samples/tutorial/quickstart/index.html" data-line-begin="6" data-line-end="8"></div> <p class="lead"> Pois bem, o único motivo de existir esse trecho de código em sua página HTML é pra definir qual será o nome do objeto global que conterá a aplicação <strong>TOAD</strong>. Como definimos para <code>MYAPP</code>, tudo partirá de <code>MYAPP</code>..., se você der outro nome, já sabe o que fazer. </p> <blockquote class="blockquote"> Na verdade sempre teremos dois objetos globais, um será a variável <code>__TOAD__</code> que contém o nome do objeto global da aplicação, e outro será o próprio objeto global da aplicação em si. Mas didaticamente isto não é importante (rsss). </blockquote> <p class="lead"> Poderíamos pré-definir um nome como <code>App</code>, ou mesmo <code>$ClientApp</code> ou algo desse tipo (pensei nisso a princípio), e com isso não precisaríamos do trecho de código JavaScript contido no HTML acima. Mas entendemos que o nome da aplicação diz muito nos scripts que escrevemos. Por exemplo, imagine que sua aplicação se chama <string>SIGF</strong> (Sistema Integrado de Gestão de Frameworks), então um trecho de código como esse: </p> <div data-gui="code-block" data-lang="js"><!--[CDATA[SIGF.namespace(/*...*/)]]--></div> <p class="lead">É muito sugestivo, não!?</p> <p class="lead"> Entenda que <code>MYAPP</code> é o seu módulo principal de aplicação, e dentro deste módulo estarão vários outros módulos (submódulos) que você construirá de acordo com sua necessidade, para abrigar suas várias peças de software, e para isso você usará espaços de nomes para manter tudo catalogado e organizado. </p> <p class="lead"> No nosso exemplo, criamos um espaço de nomes chamado <code>controllers</code> e nele abrigamos o controllador de nossa página. Com isso já garantimos que nada irá vazar para a <code>window</code> ou outro escopo exterior. </p> <p class="lead"> O controlador em si é uma função JavaScript construtora padrão, e dentro dela nós criamos uma variável privada chamada <code>message</code> que contém a mensagem que desejamos exibir. Também definimos dois métodos públicos, <code>this.onClickMessage</code> e <code>this.onClickH1</code> que por sua vez são referenciados na nossa visão, lembra: </p> <div data-gui="code-block" data-lang="html"><!--[CDATA[<button data-events="click=>onClickMessage">Diga olá por alerta!</button>]]--></div> <p class="lead">Com isso sabemos que o clicar de cada botão, chamará um método específico do controlador.</p> <p class="lead"> Aqui o importante é saber que o método precisa ser público para que <i>jQuery TOAD</i> possa vinculá-lo corretamente, ou seja, o método precisa estar "pendurado" no <code>this</code> do controlador. </p> <p class="lead">O código de cada método em nossa controller é JavaScript puro ou jQuery puro e não precisa de maiores explicações.</p> <p class="lead"> O que temos de diferente ainda são somente a linha <code>2</code> do arquivo <code>my-controller.js</code>, que usa o recurso <code>require</code> do <i>jQuery TOAD</i> para acessar os módulos de nossa aplicação. </p> <p class="lead"> Aqui no caso estamos acessando um objeto especial chamado <code>@registerController</code>, que é um recursos da jQuery TOAD, nós o utilizamos mais abaixo na linha <code>18</code> pra registrar nossa controller, chamada de <code>my</code> e vinculada ao objeto <code>MyController</code>: </p> <div data-gui="code-block" data-lang="js"><!--[CDATA[register('my', MyController);]]--></div> <p class="lead"> Você seguirá a mesma lógica sempre que precisar acessar objetos entre os vários espaços de nomes. Já que nós criamos um espaço de nomes chamado <code>controllers</code>, imagine também que você criou outro espaço de nomes chamado <code>utils</code>. Então de dentro de <code>controllers</code>, caso precise acessar objetos de <code>utils</code> você usaria algo como: </p> <div data-gui="code-block" data-lang="js"><!--[CDATA[var utils = MYAPP.require('utils');]]--></div> <p class="lead"> Daí é só você utilizar o conteúdo de utils. É claro que ainda falta falar sobre <strong>require/exports</strong>, mas trataremos disso em outro tutorial. </p> <h2>Concluindo</h2> <p class="lead"> Mesmo sendo um exemplo de código tão pequeno, serviu para explanarmos sobre nossa proposta de como podemos desenvolver aplicações jQuery de uma forma padronizada, e aplicando boas práticas que nos fazem tanto bem. Se você investir um pouco de tempo estudando essa nossa proposta, verá que pode aplicá-la imediatamente em seus projetos que usam pura e exclusivamente jQuery e JavaScript. </p> <p class="lead"> Também me arrisco a dizer, que com esse investimento de tempo pra ler essa documentação por inteiro talvez te convença a ponderar melhor sobre a necessidade de ter que usar alguma abordagem <i>SPA</i> em todos os seus projetos. Talvez o <i>"velho e querido jQuery"</i> já seja mais do que suficiente. </p> <p class="lead"> Em suma o que queremos propor com <i>jQuery TOAD</i> é um padrão para desenvolver aplicações puramente JavaScript e jQuery seguindo essas simples regras: </p> <ol class="lead font-weight-bold"> <li>Não misture HTML com JavaScript</li> <li>Controle sua visão</li> <li>Seja semântico</li> <li>Modularize</li> </ol> <p class="lead"> Este tutorial pode não ser conclusivo para você entender o uso de jQuery TOAD, mas com certeza fala dos princípios que nortearam o seu desenvolvimento. </p> <p class="lead"> Convido você a ler todos os outros tutoriais e descobrir como essa biblioteca junto a essa documentação pode te ajudar a desenvolver aplicações jQuery mais sustentáveis. </p> <p class="lead"> Sua opinião também é muito bem vinda, seja para comentar sobre os vários erros contidos na documentação, quanto para tirar dúvidas e/ou propor melhorias. Fique à vontade, o código e a documentação estão aí pra isso. </p> </div> </div> </div> </main> <footer class="text-secondary bg-light border-dark toad-footer-box"> <div class="container"> <p class="lead text-center" data-gui="copyright"></p> <div class="my-2 my-lg-0 text-center"><a class="btn btn-secondary" target="_blank" href="https://github.com/e5r/jquery-toad" role="button" title="@e5r/jquery-toad"><i class="fab fa-github"></i></a>&nbsp;<a class="btn btn-info" target="_blank" href="https://erlimar.wordpress.com" role="button" title="erlimar.wordpress.com"><i class="fab fa-wordpress-simple"></i></a>&nbsp;<a class="btn btn-primary" target="_blank" href="https://twitter.com/erlimar" role="button" title="@erlimar"><i class="fab fa-twitter"></i></a>&nbsp;<a class="btn btn-danger" target="_blank" href="https://www.youtube.com/channel/UC6zPtVBfcAdkzq7-dpSlhdw" role="button" title="E5R Development Team"><i class="fab fa-youtube"></i></a>&nbsp; </div> </div> </footer> <script src="https://unpkg.com/jquery@3.3.1/dist/jquery.js"></script> <script src="https://unpkg.com/bootstrap@4.1.2/dist/js/bootstrap.js"></script> <script src="https://unpkg.com/highlightjs@9.10.0/highlight.pack.js"></script> <script src="lib/jquery-toad.js"></script> <script src="app/components/code-block-component.js"></script> <script src="app/components/copyright-component.js"></script> <script src="app/components/demo-component.js"></script> <script src="app/controllers/main-controller.js"></script> </body> </html>