我正在学习如何使用把手,我不确定展示我的物体的最佳方式是什么。
基本上,我有一个复杂的对象要显示。对象是这样的:
{
bookList: [{
name: "the name",
reviewers: ["a reviewer name", "another reviewer"]
}]
}
然后我的把手模板需要显示如下内容:
{{#each bookList}}
<tr class="row">
<td class="cell">{{name}}</td>
<td class="cell">need to display comma separated names here, like this: "a reviewer name, another reviewer</td>
<td class="cell">display number of reviewers here, like this: "2"</td>
</tr>
{{/each}}
但是我不确定我该怎么做,或者最好的方法是做什么。在我将其传递给手柄模板之前,我可以轻松地在javascript中预格式化我的javascript对象,并添加“commaSeparatedReviewers”和“numberOfReviewers”之类的字段,但似乎用手把更高效/更好帮助我想?
我可以使用把手助手做一些事情,比如从数组中创建一个逗号分隔的字符串,并计算数组中的元素吗?如果是这样,我该怎么做?
答案 0 :(得分:4)
对于谷歌搜索的任何人,你也可以直接实现它:
{{#each array}}
{{this}}{{#unless @last}}, {{/unless}}
{{/each}}
答案 1 :(得分:2)
{{reviewers.length}}
将为您提供审阅者的数量(数组的大小)。
AFAIK没有帮助者可以轻松地使用分隔符连接数组(例如,获取逗号分隔的审阅者列表),但您可以编写自定义帮助程序,例如:
以下是某人为实施join
帮助程序而发布的解决方案:
Handlebars.registerHelper('join', function(val, delimiter, start, end) {
var arry = [].concat(val);
delimiter = ( typeof delimiter == "string" ? delimiter : ',' );
start = start || 0;
end = ( end === undefined ? arry.length : end );
return arry.slice(start, end).join(delimiter);
});
答案 2 :(得分:2)
较早的问题,但在我寻找类似问题的解决方案时,它出现了。我想我会分享我的解决方案。
Handlebars现在支持两年前可能无法使用的一些属性。即@first
和@last
。见Handlebars docs
你应该可以这样做:
{{#each bookList}}
<tr class="row">
<td class="cell">{{name}}</td>
<td class="cell">
{{#each reviewers}}
{{#unless @first}}, {{/unless}}
{{this.code}}
{{/each}}</td>
<td class="cell">{{reviewers.length}}</td>
</tr>
{{/each}}