Respuestas:
Puedes hacerlo así ...
Mustache.render('<ul>{{#.}}<li>{{.}}</li>{{/.}}</ul>', ['foo','bar','baz']);
También funciona para cosas como esta ...
var obj = [{name: 'foo'}, {name: 'bar'}];
var tmp = '<ul>{{#.}}<li>{{name}}</li>{{/.}}</ul>';
Mustache.render(tmp, obj);
{{.}}
, {{1}}
ni nada parecido en bigote (5).
Tuve el mismo problema esta mañana y después de un poco de experimentación descubrí que puedes usar {{.}} Para referirte al elemento actual de una matriz:
<ul>
{{#yourList}}
<li>{{.}}</li>
{{/yourList}}
</ul>
Mustache.render('<ul>{{#.}}<li>{{.}}</li>{{/.}}</ul>',['foo','bar','baz']);
Mustache.render('<ul>{{#.}}{{.}}{{/.}}</ul>', {yourList: ['foo','bar','baz']});
Sobre la base de la respuesta de @ danjordan, esto hará lo que quieras:
Mustache.render('<ul>{{#.}}<li>{{.}}</li>{{/.}}</ul>',['foo','bar','baz']);
regresando:
<ul><li>foo</li><li>bar</li><li>baz</li></ul>
{a:'foo',b:'bar',c:'baz'}
... ¿Cómo hacer referencias anónimas cuando se itera sobre objetos?
A continuación se muestran los ejemplos para renderizar una matriz multidimensional en una plantilla:
Ejemplo 1
'use strict';
var Mustache = require('mustache');
var view = {test: 'div content', multiple : ['foo', 'bar'], multiple_2 : ['hello', 'world']};
var template = '<div>{{test}}</div><ul>{{#multiple}}<li>{{.}}</li>{{/multiple}}</ul><ul>{{#multiple_2}}<li>{{.}}</li>{{/multiple_2}}</ul>';
var output = Mustache.render(template, view);
console.log(output);
Ejemplo 2
'use strict';
var Mustache = require('mustache');
var view = {test: 'div content', multiple : [{name: 'foo', gender: 'male'}, {name: 'bar', gender: 'female'}], multiple_2 : [{text: 'Hello', append: '**', prepend: '**'}, {text: 'World', append: '**', prepend: '**'}]};
var template = '<div>{{test}}</div><ul>{{#multiple}}<li>Hello my name is {{name}}. And I am {{gender}}</li>{{/multiple}}</ul><ul>{{#multiple_2}}<li>{{prepend}}_{{text}}_{{append}}</li>{{/multiple_2}}</ul>';
var output = Mustache.render(template, view);
console.log(output);
Para la ejecución de prueba, guarde los ejemplos anteriores en el archivo llamado 'test.js', ejecute el siguiente comando en la línea de comandos
nodejs test.js
¡No creo que el bigote pueda hacer esto! (sorprendentemente) Puede iterar sobre una lista de objetos y luego acceder a los atributos de cada objeto, ¡pero parece que no puede iterar sobre una lista simple de valores!
Entonces, debes transformar tu lista en:
[ {"value":"foo"},{"value":"bar"},{"value":"baz"} ]
y luego tu plantilla sería:
<ul>
{{#the_list}}
<li>{{value}}</li>
{{/the_list}}
</ul>
Para mí, esto parece un problema grave con Moustache: ¡cualquier sistema de plantilla debería poder recorrer una lista de valores simples!
Mustache.render('<ul>{{#.}}<li>{{.}}</li>{{/.}}</ul>',['foo','bar','baz']);