胡子可以迭代一个顶级数组吗?

我的对象是这样的:

['foo','bar','baz'] 

我想用一个小胡子模板来产生这样的事情:

 "<ul><li>foo</li><li>bar</li><li>baz</li></ul>" 

但是,如何? 我真的必须先把它变成这样的东西吗?

 {list:['foo','bar','baz']} 

你可以这样做…

 Mustache.render('<ul>{{#.}}<li>{{.}}</li>{{/.}}</ul>', ['foo','bar','baz']); 

它也适用于这样的事情…

 var obj = [{name: 'foo'}, {name: 'bar'}]; var tmp = '<ul>{{#.}}<li>{{name}}</li>{{/.}}</ul>'; Mustache.render(tmp, obj); 

今天早上我有同样的问题,经过一些实验,我发现你可以使用{{。}}引用数组的当前元素:

 <ul> {{#yourList}} <li>{{.}}</li> {{/yourList}} </ul> 

build立在@ danjordan的答案,这将做你想要的:

 Mustache.render('<ul>{{#.}}<li>{{.}}</li>{{/.}}</ul>',['foo','bar','baz']); 

返回:

 <ul><li>foo</li><li>bar</li><li>baz</li></ul> 

以下是在模板中呈现multidimensional array的示例:

例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); 

例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); 

对于testing运行,将上面的例子保存在名为“test.js”的文件中,在命令行中运行以下命令

 nodejs test.js 

我不认为胡子可以做到这一点! (令人惊讶的是)您可以迭代对象列表,然后访问每个对象的属性,但似乎无法遍历一个简单的值列表!

所以,你必须把你的列表变成:

 [ {"value":"foo"},{"value":"bar"},{"value":"baz"} ] 

然后你的模板将是:

 <ul> {{#the_list}} <li>{{value}}</li> {{/the_list}} </ul> 

对我来说,这看起来像一个胡须严重的问题 – 任何模板系统应该能够循环一个简单的值列表!