14

这是一个典型的 Handlebars 助手:

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

根据这个 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}}

我的问题是:如何将其他参数传递给 helper以及helperin之间有什么区别options.hashoptions.data

4

1 回答 1

17

传递给辅助函数的参数成为arguments辅助函数。您在模板中提供的值紧随其后{{helperName成为参数。传递给助手的最后一个参数是一个options对象,它为助手提供额外的信息,如 anoptions.hashoptions.contexts等。参数后提供的键值对对应于options.hash属性。

对于hello接受 3 个参数的助手,助手将是,

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 回答