1

我正在学习如何使用把手,但我不确定显示对象的最佳方式是什么。

基本上,我有一个复杂的对象要显示。对象是这样的:

{
  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”这样的字段,但使用把手似乎会更有效/更好我认为的帮手?

我可以使用车把助手来做一些事情,比如从数组中创建一个逗号分隔的字符串,然后计算数组中的元素吗?如果是这样,我该怎么做?

4

3 回答 3

7

对于任何使用谷歌搜索的人,您也可以直接实现它:

{{#each array}}
    {{this}}{{#unless @last}}, {{/unless}}
{{/each}}
于 2016-02-21T18:27:55.587 回答
3

{{reviewers.length}}在该循环中将为您提供审阅者的数量(数组的大小)。

AFAIK 没有帮助轻松加入带有分隔符的数组(例如,获取以逗号分隔的审阅者列表),但您可以编写自定义帮助,例如:

GitHub 功能请求

这是某人发布的用于实施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); 
});
于 2013-06-14T00:39:33.780 回答
2

较旧的问题,但在我寻找类似问题的解决方案时出现了。我想我会分享我的解决方案。

Handlebars 现在支持一些两年前可能不可用的属性。即@first@last。请参阅车把文档

你应该能够做这样的事情:

{{#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}}
于 2015-06-22T21:35:03.200 回答