ember.js - 如何将参数传递给 Handlebars 助手? options.hash 和 options.data 有什么区别

标签 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.hash 和有什么区别和 options.data在助手中 ?

最佳答案

传递给助手的参数变为 arguments到辅助函数。您在模板中紧跟 {{helperName 之后提供的值成为论据。传递给助手的最后一个参数是 options向助手提供附加信息的对象,如 options.hashoptions.contexts等参数后提供的键值对对应options.hash属性(property)。

对于 hello需要 3 个参数的助手,助手将是,

Ember.Handlebars.helper('hello', function(a, b, c, options) {
  return '%@ - %@ - %@'.fmt(a, b, c);
});
hello helper 可以在这样的模板中使用,
{{hello lorem ipsum dolor}}

这里 lorem 的值, ipsum , 和 dolor属性将被使用并作为组合字符串返回。

除了必需的参数之外,如果您传入附加参数,它们将在 options.hash 中可用。 .这些属性被视为字符串,默认情况下不解析。您需要使用 options.data.view首先查找它们的值。看到这个answer例如,如果您需要这样做。

最后options.data是提供给助手的特殊属性(property)。这是原始 Handlebars Frame包含变量、上下文等。它主要用于 block 助手。由于 block 助手不渲染自己而是调用其他助手,options.data允许这样的 block 助手将额外的变量注入(inject)到子助手框架中。有关详细信息,请参阅文档 here .

这是 jsbin例子。

关于ember.js - 如何将参数传递给 Handlebars 助手? options.hash 和 options.data 有什么区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17954192/

相关文章:

javascript - Ember 链接不渲染模板

javascript - 使用 Handlebars 自定义帮助器方法来隐藏 HTML

javascript - 如何使用handlebars来处理这样复杂的JSON数据?

javascript - 将变量从#each 循环传递给助手 emberjs

javascript - Ember 事件处理程序中缺少 view.context 或 templateContext

javascript - 根据路线决定渲染到哪个导出

ember.js - 何时编写自定义 ember-data 适配器?

ember.js - 从 emberjs 中 Controller 的操作调用方法

javascript - 如何在 PhantomJS 中测试 String.prototype.includes

node.js - 如何使用服务 worker 缓存handlebars.js