3

我在模板中遍历一个普通数组:

{{#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辅助函数中的变量只是字符串“章节”。如何访问实际变量本身?

4

2 回答 2

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()

于 2013-09-13T13:36:37.027 回答
1

如果你想要一个绑定助手,你需要使用Ember.Handlebars.registerBoundHelper它的别名来Ember.Handlebars.helper代替。

Ember.Handlebars.helper('test', function(chapter) {
  return this.get('list.selectedChapter') == chapter ? 'selected' : '';
});
于 2013-07-28T11:30:26.487 回答