2013-07-30 14 views
13

との差が、ここでは代表的なハンドルバーヘルパーは何です:Handlebarsヘルパーにパラメータを渡す方法は? options.hash&options.data

Ember.Handlebars.helper 'myHelper', (value, options) -> 
    ... 

this protipによると、あなたがハンドルバーヘルパーにハッシュを渡すことができます。私はソースを見て、それがoptions.hashoptions.dataの両方を提供することを発見しました。私は予想通り、これは動作しないだろうと少し困惑している:

{{#with controllers.currentCardCategory}} 
    {{#each property in cardProperties}} 
    <td class="td">{{cardProperty this property=property.symbol}}</td> 
    {{/each}} 
{{/with}} 

thisは、現在のCardレコードです。ここで私は、文字列

としてproperty.symbolを得たが、これは働いていた:

{{#with controllers.currentCardCategory}} 
    {{#each property in cardProperties}} 
    <td class="td">{{cardProperty this property.symbol}}</td> 
    {{/each}} 
{{/with}} 

をし、値がoptions経由でアクセスできました。

しかし、今、私はこれを行うことはできません。

{{#with controllers.currentCardCategory}} 
    {{#each property in cardProperties}} 
    <td class="td">{{cardProperty this property.symbol anotherParam yetAnotherParam}}</td> 
    {{/each}} 
{{/with}} 

私の質問は:ヘルパーに他のパラメータを渡す方法ヘルパーoptions.hashoptions.dataの違いは何ですか?

答えて

14

ヘルパーに渡されるパラメータは、ヘルパー機能に対してargumentsになります。 {{helperNameの直後にテンプレートに入力した値が引数になります。ヘルパーに渡された最後の引数は、options.hashoptions.contextsなどのヘルパーに追加情報を提供するoptionsオブジェクトです。パラメータの後に提供されるキー値のペアは、options.hashプロパティに対応します。

3つの引数を取る helloヘルパーについては

、ヘルパーは次のようになり、

Ember.Handlebars.helper('hello', function(a, b, c, options) { 
    return '%@ - %@ - %@'.fmt(a, b, c); 
}); 

helloヘルパーはそうのようなテンプレートで使用することができ、ここで

{{hello lorem ipsum dolor}} 

loremの値は、 ipsum、およびdolorプロパティが使用され、結合文字列として返されます。

追加引数に加えて、追加パラメータを渡す場合は、options.hashで利用できます。これらのプロパティは文字列として扱われ、デフォルトでは解決されません。最初に値を検索するには、options.data.viewを使用する必要があります。これを行う必要がある場合の例については、answerを参照してください。

最後にoptions.dataは、ヘルパーに提供される特別な財産です。変数、コンテキストなどを保持するのは生のハンドルバーFrameです。これは主にブロックヘルパーで使用するためのものです。ブロックヘルパーはレンダー自体はしませんが、他のヘルパーに電話をかけるため、ブロックヘルパーは子ヘルパーフレームに追加の変数を注入できます(options.data)。詳細は、ドキュメントhereを参照してください。

ここにはjsbinの例があります。

関連する問題