私はハンドルバーテンプレート内の配列内の項目のインデックスを指定しようとしています:
{
people: [
{"name":"Yehuda Katz"},
{"name":"Luke"},
{"name":"Naomi"}
]
}
これを使って:
<ul id="luke_should_be_here">
{{people[1].name}}
</ul>
上記が不可能な場合は、配列内の特定の項目にアクセスできるヘルパーをどのように作成すればよいでしょうか。
これを試して:
<ul id="luke_should_be_here">
{{people.1.name}}
</ul>
次のは、インデックスの前にドットを追加したもので、期待どおりに機能します。ここで、インデックスの後に別のプロパティが続く場合、角括弧はオプションです。
{{people.[1].name}}
{{people.1.name}}
ただし、角括弧は必須にあります。
{{#with people.[1]}}
{{name}}
{{/with}}
後者の場合、角括弧なしでインデックス番号を使用すると1になります。
Error: Parse error on line ...:
... {{#with people.1}}
-----------------------^
Expecting 'ID', got 'INTEGER'
余談ですが、括弧は、(インデックスリテラル構文ではない)実際の識別子(インデックス番号ではない)を参照するために、(無効な) セグメントリテラル構文 にも使用されます。詳細は 有効な識別子とは何ですか?
(YUIのハンドルバーでテスト済み)
これにはget
ヘルパーを使用できます。
(get people index)
ただし、インデックスが文字列である必要があるというエラーが発生した場合は、次のようにします。
(get people (concat index ""))
{{#each array}}
{{@index}}
{{/each}}
文書化されていない機能があなたのゲームではない場合、同じことがここで達成できます。
Handlebars.registerHelper('index_of', function(context,ndx) {
return context[ndx];
});
それからテンプレートで
{{#index_of this 1}}{{/index_of}}
私が手に入れる前に私は上記を書いた
this.[0]
あなた自身のヘルパーを書かずにハンドルバーを使い過ぎた人はいないでしょう。
動的変数を使いたい場合
これはうまくいきません。
{{#each obj[key]}}
...
{{/each}}
あなたがする必要があります:
{{#each (lookup obj key)}}
...
{{/each}}
handlebars lookup helper および handlebars subexpressions を参照してください。
最初/最後を取得したい場合は、これを試してください。
{{#each list}}
{{#if @first}}
<div class="active">
{{else}}
<div>
{{/if}}
{{/each}}
{{#each list}}
{{#if @last}}
<div class="last-element">
{{else}}
<div>
{{/if}}
{{/each}}
each
を使用して配列をループしているときに、現在の項目のコンテキストで別の配列にアクセスしたい場合は、次のようにします。
これがデータ例です。
[ { name: 'foo'、 attr:['boo'、 'Zoo'] } 、 { name: 'bar'、 attr:['far'、 'zar'] } ] ]
これはattr
配列の最初の項目を取得するためのハンドルバーです。
{{#各プレーヤー}} <p> {{this.name}} </p> {{#with this.attr}} <p> {{this。[0]}} </p> {{/ with}} {{/ each}}
これは出力します
<p> foo </p> <p> boo </p> <p> bar </p> < p> far </p>
次の構文は、配列に名前が付けられていない場合にも使用できます(配列だけがテンプレートに渡されます)。
<ul id="luke_should_be_here">
{{this.1.name}}
</ul>
私の場合は、カスタムヘルパー内の配列にアクセスしたいのですが、
{{#ifCond arr.[@index] "foo" }}
これはうまくいきませんでしたが、@ julesbouが提案した答えはうまくいきました。
作業コード
{{#ifCond (lookup arr @index) "" }}
お役に立てれば!乾杯。