胡子可以迭代一个顶级数组吗?
我的对象是这样的:
['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>
对我来说,这看起来像一个胡须严重的问题 – 任何模板系统应该能够循环一个简单的值列表!