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}}そのループ内で、レビュー担当者の数 (配列のサイズ) が得られます。

私の知る限り、配列を区切り記号で簡単に結合するためのヘルパーはありません (例: レビュー担当者のカンマ区切りのリストを取得する) が、次のようなカスタム ヘルパーを作成できます。

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 に答える