Mustache: un template engine leggero e intuitivo

Mustache è una libreria JavaScript leggera, facile da usare e altamente flessibile. La sua sintassi minimalista rende semplice la creazione di template HTML dinamici che si adattano a rappresentare diversi insiemi di dati.

Per utilizzare la libreria, è sufficiente includere il file JavaScript nella propria pagina web e definire il template HTML da compilare con i dati. Mustache gestisce il resto, compilando automaticamente il template HTML con i dati forniti.

Ecco un esempio di utilizzo di Mustache per creare il template di una scheda contatti:

<!DOCTYPE html>
<html>
  <head>
    <title>Scheda contatti</title>
    <script src="https://cdnjs.cloudflare.com/ajax/libs/mustache.js/4.1.0/mustache.min.js"></script>
  </head>
  <body>
    <template id="contact-template">
    <h1>{{nome}} {{cognome}}</h1>
    <p><strong>Email:</strong> {{email}}</p>
    <p><strong>Telefono:</strong> {{telefono}}</p>
    <h2>Contatti:</h2>
    <ul>
      {{#contatti}}
        <li>{{.}}</li>
      {{/contatti}}
    </ul>
    </template>
    <div id="scheda-contatto"></div>
    <script>
      var template = document.getElementById("contact-template").innerHTML;
      var data = {
        nome: "Mario",
        cognome: "Rossi",
        contatti: ["06-27091973", "555-123456", "mario.rossi@gmail.com"]
      };
      var html = Mustache.render(template, data);
      document.getElementById("scheda-contatto").innerHTML = html;
    </script>
  </body>
</html>

In questo esempio, il template HTML definisce le sezioni per il nome, il cognome, nonché un elenco di contatti. Gli attributi scalari sono mappati con il placeholder {{ … }}. La sezione con l’elenco contatti è creata utilizzando la sintassi Mustache {{#contatti}} … {{/contatti}} che indica che la sezione deve essere ripetuta per ogni elemento nell’array contatti.

Per definire l’i-esimo elemento all’interno della lista si usa l’espressione {{.}}. Se nell’elenco ci fossero oggetti, allora si utilizzerebbe la classica espressione con il placeholder per gli attributi scalari.

Se si vuole invece individuare la proprietà di un oggetto annidato, è sufficiente utilizzare la dot notation di Javascript per i placeholder.

Inoltre è possibile definire delle funzioni nell’oggetto javascript e richiamarle come proprietà composte

Ad esempio

data = {
    nome: "Mario",
    cognome: "Rossi",
    contatti: ["06-27091973", "555-123456", "mario.rossi@gmail.com"],
    nomecompleto: function () {
        return this.nome + " " + this.cognome;
    }
};

nel template potremmi riferisci alla funzione con {{nomecompleto}}.

Il codice JavaScript dell’esempio definisce un oggetto data che contiene i dati da utilizzare per compilare il template HTML. La funzione Mustache.render() compila il template con i dati forniti, restituendo l’HTML compilato. Infine, il codice JavaScript sostituisce il contenuto del div “scheda-contatto” con l’HTML compilato.

La libreria è utilissima quando dovete renderizzare un contenuto che vi viene fornito da un servizio REST / JSON.

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *