14

典型的なハンドルバー ヘルパーを次に示します。

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

このプロティップによると、Handlebars ヘルパーにハッシュを渡すことができます。ソースを調べたところ、 と の両方が提供されていることがわかりまし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ですか?

4

1 に答える 1

17

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

hello3 つの引数を取るヘルパーの場合、ヘルパーは次のようになります。

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

helloヘルパーは、次のようにテンプレートで使用できます。

{{hello lorem ipsum dolor}}

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

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

最後options.dataに、ヘルパーに提供される特別なプロパティです。Frame変数、コンテキストなどを保持するのは生のハンドルバーです。これは主にブロック ヘルパーで使用するためのものです。ブロック ヘルパーは自分自身をレンダリングするのではなく、他のヘルパーを呼び出すため、options.dataそのようなブロック ヘルパーが追加の変数を子ヘルパー フレームに挿入できるようにします。詳細については、こちらのドキュメントを参照してください。

jsbinの例を次に示します。

于 2013-07-31T16:23:58.633 に答える