我正在使用Mustache并使用数据
{ "names": [ {"name":"John"}, {"name":"Mary"} ] }
我的胡子模板是:
{{#names}}
{{name}}
{{/names}}
我希望能够做的是获得数组中当前数字的索引。类似于:
{{#names}}
{{name}} is {{index}}
{{/names}}
并将其打印出来
John is 1
Mary is 2
有没有可能用Mustache得到这个?或者带把手或其他扩展?
发布于 2012-11-26 05:16:14
作为参考,此功能现已内置于与Mustache兼容的Handlebar中。
使用{{@index}}
{{#names}}
{{name}} is {{@index}}
{{/names}}
约翰是0岁
玛丽1岁
发布于 2012-04-18 19:18:13
我在JavaScript中是这样做的:
var idx = 0;
var data = {
"names": [
{"name":"John"},
{"name":"Mary"}
],
"idx": function() {
return idx++;
}
};
var html = Mustache.render(template, data);
您的模板:
{{#names}}
{{name}} is {{idx}}
{{/names}}
发布于 2011-02-22 10:24:57
在handlebars.js中,您可以使用helper函数来完成此任务。(事实上,这里提到的http://yehudakatz.com/2010/09/09/announcing-handlebars-js/关于handlebars的优点之一是,您可以使用帮助器,而不必在调用模板之前重写对象。
所以,你可以这样做:
var nameIndex = 0;
Handlebars.registerHelper('name_with_index', function() {
nameIndex++;
return this.name + " is " + nameIndex;
})
然后,您的模板可以是:
{{#names}}
<li>{{name_with_index}}</li>
{{/names}}
您的数据与之前相同,即:
{ "names": [ {"name":"John"}, {"name":"Mary"} ] };
你会得到这样的输出:
<li>John is 1</li>
<li>Mary is 2</li>
要使其真正工作,nameIndex需要在每次呈现模板时进行重置,因此,可以在列表的开头设置一个重置帮助器。因此,完整的代码如下所示:
var data = { "names": [ {"name":"John"}, {"name":"Mary"} ] };
var templateSource = "<ul>{{reset_index}}{{#names}}<li>{{name_with_index}}</li>{{/names}}</ul>";
var template = Handlebars.compile(templateSource);
var helpers = function() {
var nameIndex = 0;
Handlebars.registerHelper('name_with_index', function() {
nameIndex++;
return this.name + " is " + nameIndex;
});
Handlebars.registerHelper('reset_index', function() {
nameIndex = 0;
})
}();
var htmlResult= template(data);
$('#target').html(htmlResult);
var htmlResult2= template(data);
$('#target2').html(htmlResult2);
(这可以正确地渲染模板两次。)
https://stackoverflow.com/questions/5021495
复制相似问题