ハンドルバーテンプレート内の配列の長さを見つける方法は?


87

jsonオブジェクトを使用してレンダリングされるHandlebarsテンプレートがあります。このjsonでは、配列を送信しています。このような:

var json = {
               "array":["abc","def","ghi","jkl"] 
}

テンプレートで、この配列の長さを見つけたいと思います。何かのようなもの:

{{#each item}}
   {{ array.length }}
{{/each}}

ハンドルバーのドキュメントで見つかりませんでした。

回答:


189

私の悪い....

{{array.length}}実際にはテンプレート内で機能しました。ここに投稿する前にチェック/テストする必要があります。


37
さて、あなたはそれをテストする必要から私を救ったので、ありがとう。:)
ペリーテュー

8
これは、少なくとも不思議に思っている人のためのハンドルバーのマンドリルフレーバーでは機能しません。適切な代替品はまだ見つかりません。
オネイロス2016

44

この場合、各ブロック内からそれぞれの親変数を参照する必要があります。

{{#each array}}
    {{../array.length}}
{{/each}}

「配列」という名前の変数も、おそらく問題を混乱させていると思います。明確にするために、いくつかの異なるJSONを想定しましょう。

var json = {
    "fruit":["apple","orange","banana"]
};

だからこれを行う:

<ul>
    {{#each fruit}}
        <li>{{this}} {{@index}} {{../fruit.length}}</li>
    {{/each}}
</ul>

降伏します:

<ul>
    <li>apple 0 3</li>
    <li>orange 1 3</li>
    <li>banana 2 3</li>
</ul>

1
リストの項目は次のようになると思いますapple 0 3 orange 1 3 banana 2 3
Paul

@Paul、あなたは正しいです。正しい出力を反映するように例が更新されました。
ケビンパウエル

関連する質問:現在のパイプライン値である場合、配列の長さをどのように取得しますか?
Gyscos 2015年

構文的には、この回答は受け入れられた回答よりも理にかなっています。
ニールモンロー

これは素晴らしい答えであり、正しいものとして選択する必要があります!
Aditya Rao

2

それを処理するための単純なヘルパーを定義できます。

Handlebars.registerHelper('get_length', function (obj) {
 return obj.length;
});   

そして、それをテンプレートで使用します。例:

{{get_length some_object}}

2

コンテンツを表示するために空のリストをテストしている場合...ハンドルバーを使用するEmber.jsでは、#eachにelseを設定できます。

{{#each blah as |blah|}}

{{else}}
 //   If array is empty
{{/each}}
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.