提问者:小点点

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


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

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

chatperList这里是,比如说,[1,2,3,4,5]。我做了一个车把助手:

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

但是helper函数中的章节变量只是字符串“章节”。我如何访问实际变量本身?


共2个答案

匿名用户

这看起来像Ember中的bug(仍然在最新的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. Handlebar.checksterHelper()而不是Ember.Handlebar.helper()

匿名用户

如果你想要一个绑定的助手,你需要使用Ember. Handlebar.regsterBoundHelper,它的别名是Ember.Handlebar.helper

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

相关问题