如何将参数传递给Handlebars帮助器? options.hash&和options之间的区别是什么? options.data

时间:2013-07-30 18:03:56

标签: ember.js handlebars.js

这是一个典型的Handlebars助手:

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

根据this protip,您可以将哈希传递给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之间的差异?< / p>

1 个答案:

答案 0 :(得分:14)

传递给帮助程序的参数变为arguments到辅助函数。您在{{helperName之后立即在模板中提供的值将成为参数。传递给助手的最后一个参数是options对象,它为助手提供了额外的信息,例如options.hashoptions.contexts等。参数对应{{{}后提供的键值对1}}属性。

对于带有3个参数的options.hash助手,助手将是

hello

Ember.Handlebars.helper('hello', function(a, b, c, options) { return '%@ - %@ - %@'.fmt(a, b, c); }); 助手可以在模板中使用,

hello

此处将使用{{hello lorem ipsum dolor}} loremipsum属性的值,并将其作为组合字符串返回。

除了必需的参数之外,如果您传入附加参数,它们将在dolor中可用。这些属性被视为字符串,默认情况下不会解析。您需要先使用options.hash来查找其值。如果您需要这样做,请参阅此answer以获取示例。

最后options.data.view是为助手提供的特殊属性。它是包含变量,上下文等的原始把手options.data。它主要用于块助手。由于块助手不会自己渲染而是调用其他助手,Frame允许这样的块助手将其他变量注入子助手帧。有关详细信息,请参阅文档here

这是一个jsbin示例。