我在我的模板中迭代一个普通数组:
{{#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”。如何访问实际变量本身?
答案 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' : '';
});