如何将任意模板变量传递给车把助手?

时间:2013-07-28 02:43:37

标签: ember.js

我在我的模板中迭代一个普通数组:

{{#each chapter in chapterList}}
  <li>{{ chapter }} {{ test chapter }}</li>
{{/each}}

chatperList这里是[1, 2, 3, 4, 5]。我做了一个Handlebars帮手:

Ember.Handlebars.registerHelper('test', function(chapter) {
  return this.get('list.selectedChapter') == chapter
    ? 'selected'
    : '';
});

但是辅助函数中的chapter变量只是字符串“chapter”。如何访问实际变量本身?

2 个答案:

答案 0 :(得分:2)

这看起来像是Ember中的一个错误(仍然在最新的v1.0中)...你无法将变量传递给#each中的帮助器,或者你得到: -

TypeError: Object.defineProperty called on non-object

我刚刚使用options.data的内容找到了一个解决方法,但是这意味着你需要引用你传递的对象,如果它在#each中(注意'颜色'而不是下面的颜色)

模板:

<ul>
  <li>{{helpme color 'lorry'}}</li>

{{#each color in model}}
  <li>{{helpme 'color' 'lorry'}}</li>
{{/each}}
</ul>

助手:

Ember.Handlebars.helper('helpme', function (color, vehicle, opts) {
    var str = color;
    if (typeof opts.data.keywords[color] === 'string') {
        str = opts.data.keywords[color];
    }
    return new Ember.Handlebars.SafeString(str + '_' + vehicle);    
});

...查看我的JSFiddle

编辑:旧版本的Ember使用Ember.Handlebars.registerHelper()代替 Ember.Handlebars.helper()

答案 1 :(得分:1)

如果您需要绑定帮助器,则需要使用Ember.Handlebars.registerBoundHelper替换为Ember.Handlebars.helper的别名。

Ember.Handlebars.helper('test', function(chapter) {
  return this.get('list.selectedChapter') == chapter ? 'selected' : '';
});