这是一个典型的Handlebars助手:
Ember.Handlebars.helper 'myHelper', (value, options) ->
...
根据this protip,您可以将哈希传递给Handlebars助手。我查看了源代码,发现它同时提供了options.hash
和options.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.hash
和options.data
之间的差异?< / p>
答案 0 :(得分:14)
传递给帮助程序的参数变为arguments
到辅助函数。您在{{helperName
之后立即在模板中提供的值将成为参数。传递给助手的最后一个参数是options
对象,它为助手提供了额外的信息,例如options.hash
和options.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}}
,lorem
和ipsum
属性的值,并将其作为组合字符串返回。
除了必需的参数之外,如果您传入附加参数,它们将在dolor
中可用。这些属性被视为字符串,默认情况下不会解析。您需要先使用options.hash
来查找其值。如果您需要这样做,请参阅此answer以获取示例。
最后options.data.view
是为助手提供的特殊属性。它是包含变量,上下文等的原始把手options.data
。它主要用于块助手。由于块助手不会自己渲染而是调用其他助手,Frame
允许这样的块助手将其他变量注入子助手帧。有关详细信息,请参阅文档here。
这是一个jsbin示例。