Respostas:
Você pode fazer assim ...
Mustache.render('<ul>{{#.}}<li>{{.}}</li>{{/.}}</ul>', ['foo','bar','baz']);
Também funciona para coisas como esta ...
var obj = [{name: 'foo'}, {name: 'bar'}];
var tmp = '<ul>{{#.}}<li>{{name}}</li>{{/.}}</ul>';
Mustache.render(tmp, obj);
{{.}}
, {{1}}
ou algo semelhante no bigode (5).
Tive o mesmo problema esta manhã e, após um pouco de experimentação, descobri que você pode usar o {{.}} Para se referir ao elemento atual de uma matriz:
<ul>
{{#yourList}}
<li>{{.}}</li>
{{/yourList}}
</ul>
Mustache.render('<ul>{{#.}}<li>{{.}}</li>{{/.}}</ul>',['foo','bar','baz']);
Mustache.render('<ul>{{#.}}{{.}}{{/.}}</ul>', {yourList: ['foo','bar','baz']});
Com base na resposta de @danjordan, isso fará o que você quiser:
Mustache.render('<ul>{{#.}}<li>{{.}}</li>{{/.}}</ul>',['foo','bar','baz']);
retornando:
<ul><li>foo</li><li>bar</li><li>baz</li></ul>
{a:'foo',b:'bar',c:'baz'}
... Como fazer referências anônimas ao iterar sobre objetos?
A seguir estão os exemplos para renderizar uma matriz multidimensional em um modelo:
Exemplo 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);
Exemplo 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 executar o teste, salve os exemplos acima no arquivo chamado 'test.js', execute o seguinte comando na linha de comando
nodejs test.js
Não acho que bigode possa fazer isso! (surpreendentemente) Você pode iterar em uma lista de objetos e, em seguida, acessar os atributos de cada objeto, mas parece que você não consegue iterar em uma lista simples de valores!
Então, você deve transformar sua lista em:
[ {"value":"foo"},{"value":"bar"},{"value":"baz"} ]
e então seu modelo seria:
<ul>
{{#the_list}}
<li>{{value}}</li>
{{/the_list}}
</ul>
Para mim, isso parece um problema grave com o Mustache - qualquer sistema de modelo deve ser capaz de fazer um loop sobre uma lista de valores simples!
Mustache.render('<ul>{{#.}}<li>{{.}}</li>{{/.}}</ul>',['foo','bar','baz']);