13. Uso del comando (template)

El paquete web_ui añade el comando <templates> al código HTML para relacionar .html con .dart de dos formas: Condiconal y Bucle iterante.

  • Crear una aplicación web con weg_ui llamada 'letras' y cambiar el código por el de abajo.
  • En .dart defino dos listas y dos funciones:
    • lista_abc : con cada una de las letras del abecedario
    • guiones: con tantos guiones como letras tiene el abecedario
    • comprueba_letra() : mira si letra_nueva esta en letras_abc
    • muestra_letra(): cambia un guión por letra_nueva
  • En .html defino tres templates
    • <template iterate="letra in guiones"> {{letra}} : la variable letra itera sobre la lista de guiones
    • <template if="!completado"> : Si completado = false, añade un mensaje Teclea las letras... y un  input al DOM.
    • <template if="completado"> : Si completado = true, añade el mensaje ¡Lo has completado! al DOM.



letra.dart
//Define la cadena con todo el abecedario
String letras_cadena = 'abcdefghijklmnñopqrstuvwxyz'; 
//Crea una lista con cada letra como elemento
List<String> letras_abc = letras_cadena.splitChars(); 
//Crea lista remplazando la lista de letras por guiones
List<String> guiones = letras_cadena.replaceAll(new RegExp('.'), '-').splitChars(); 

String letra_nueva = ''; //Define la letra a ingresar

bool completado = false; //Define si/no esta completado

void main() {  //No necesita nada el main, solo dos funciones llamadas desde html



//Funcion para comprobar si letra_nueva esta en la lista de letras 

void comprueba_letra() {  
  if (letras_abc.contains(letra_nueva)) {  //Comprueba si esta en la lista
    muestra_letra();                       //Si esta muestra la lista de guiones con la letra nueva
    if (!guiones.contains('-')) {          //Si la lista de guiones no tiene ningún guión, completado = si
      completado = true;
    }
  }
  letra_nueva = ''; //Vacia letra_nueva a la espera del input
}

//Funcion para poner letra_nueva en la lista de guiones

void muestra_letra() { 
  for (int i = 0; i < letras_abc.length; i++) { //Bucle que recorre toda la lista de letras
    if (letras_abc[i] == letra_nueva) {         //Si el elelmento de lista_letras es igual letra_nueva
      guiones[i] = letra_nueva;                 //Cambia el elemento i de guiones por letra_nueva.
    }
  }
}


letras.html

<!DOCTYPE html>

<html>
  <head>
    <meta charset="utf-8">
    <title>Abecedario</title>
    <link rel="stylesheet" href="letras.css">
  </head>
  <body>
    <h1>Abecedario</h1>

        <div id="abc">

          <!-- Bucle iterativo sobre la lista 'guiones' recorrida por la variable 'letra' -->
          <template iterate="letra in guiones"> {{letra}} </template>
        </div>
      
        <div>
          <!-- Si no se ha completado añade un input al DOM para pedir una letra -->
          <template if="!completado"> 
            Teclea las letras una a una
            <!-- Al levantar la tecla lanza la funcion 'comprueba_letra()' mete el input en 'letra_nueva' -->
            <input on-key-up="comprueba_letra()" bind-value="letra_nueva">
          </template>
          
          <!-- Si se ha completado muestra el mensaje en el DOM -->          
          <template if="completado"> ¡Lo has completado! </template>
        </div>
          
    <script type="application/dart" src="letras.dart"></script>
    <script src="packages/browser/dart.js"></script>
  </body>
</html>

No hay comentarios: