Mustache es un sistema de plantillas web . Se describe como un sistema sin lógica porque carece de declaraciones de flujo de control explícitas , como condicionalesif
y o bucles for ; sin embargo, tanto la ejecución de bucles como la evaluación condicional se pueden lograr utilizando etiquetas de sección que procesan listas y funciones anónimas (lambdas). Se llama "Mustache" debido al uso intensivo de llaves , , que se asemejan a un bigote de lado . Mustache se utiliza principalmente para aplicaciones móviles y web. [1] [2]else
{ }
Las implementaciones están disponibles en ActionScript , C++ , Clojure , CoffeeScript , ColdFusion , Common Lisp , Crystal , D , Dart , Delphi , Elixir , Erlang , Fantom , Go , Haskell , Io , Java , JavaScript , Julia , Lua , .NET , Objective-C , OCaml , Perl , PHP , Pharo , Python , R , Racket , Raku , Ruby , Rust , Scala , Smalltalk , Swift , Tcl , CFEngine y XQuery .
Mustache-1 se inspiró en ctemplate y et, [3] y comenzó como una distribución de GitHub a fines de 2009. Se implementó una primera versión del motor de plantillas con Ruby , que ejecutaba textos de plantilla YAML . Los principios principales (preservados) fueron:
Los datos de entrada pueden ser una clase , de modo que los datos de entrada se puedan caracterizar como una vista de modelo-vista-controlador (MVC). La plantilla Mustache no hace nada más que hacer referencia a métodos en la vista (datos de entrada) . [3] Toda la lógica, las decisiones y el código están contenidos en esta vista , y todo el marcado (p. ej., XML de salida ) está contenido en la plantilla . En un contexto de modelo-vista-presentador (MVP): los datos de entrada son de MVP- presentador , y la plantilla Mustache es MVP- vista .
Los datos JSON se introducen en las plantillas de Mustache y generan un resultado. A continuación, se muestran algunos datos de ejemplo:
{ "nombre" : "Mundo" , "mayor que" : ">" }
Una plantilla de bigote simple como la que se muestra a continuación, combinada con los datos anteriores, generaría como resultado Hello World
.
HTML de Mustache escapa los datos de forma predeterminada. Por ejemplo, lo siguiente se representaría como 2 > 1
.
Para desactivar el escape, utilice un &
. El siguiente texto se representaría como 2 > 1
.
A continuación se muestra una plantilla con etiqueta de sección. Cuando x
es un valor booleano , la etiqueta de sección actúa como una condición if . Cuando x
es una matriz , actúa como un bucle foreach .
La variable especial {{.}}
se refiere al elemento actual cuando se recorre una matriz, o al elemento seleccionado en una condición.
Puedes indicarle a una plantilla Mustache que cargue otra plantilla Mustache dentro de ella usando el >
símbolo .
Los comentarios se indican mediante un signo de exclamación.
El resaltado de sintaxis está disponible en Atom , Coda , Emacs , [4] TextMate , Vim y Visual Studio Code . [5]
La compatibilidad con plantillas Mustache está integrada en muchos marcos de aplicaciones web (por ejemplo, CakePHP ) [ cita requerida ] . La compatibilidad con JavaScript incluye tanto la programación del lado del cliente con muchas bibliotecas de JavaScript y marcos de Ajax como jQuery , Dojo y YUI , como también JavaScript del lado del servidor usando Node.js y CommonJS .
Hay muchas implementaciones de Mustache Engine disponibles, y todas ellas cumplen una especificación formal común (ver enlaces externos), que para los usuarios finales da como resultado una sintaxis común.
En marzo de 2011, la última SPEC_VERSION era 1.1.2. [6]
Todos los motores Mustache , en la arquitectura v1.X, tienen un método de renderizado , una clase Mustache_Compiler y una clase Parser . [ cita requerida ]
Mustache inspiró numerosas bibliotecas de plantillas de JavaScript que se derivaron de la simplicidad original para agregar cierta funcionalidad o uso. [ cita requerida ]
Handlebars.js [7] se describe a sí mismo como:
Handlebars.js es una extensión del lenguaje de plantillas Mustache creado por Chris Wanstrath. Handlebars.js y Mustache son lenguajes de plantillas sin lógica que mantienen la vista y el código separados como todos sabemos que deberían estar. [8]
Handlebars se diferencia de su predecesor en que, dentro de las Expresiones de Bloque (similares a las secciones en Mustache), los Ayudantes permiten funciones personalizadas a través de código explícito escrito por el usuario para ese bloque.