将变量传递给ember把手

Int*_*tss 1 handlebars.js ember.js

我有一个Ember.js ArrayController和一些看起来像这样的把手代码

<p>{{length}} {{pluralize length "thing"}}</p>
Run Code Online (Sandbox Code Playgroud)

然后我有一个看起来像的车把帮手

Handlebars.registerHelper('pluralize', function(count, str){
    debugger;
    return (count > 1 ? str+"s" : str);
  }
); 
Run Code Online (Sandbox Code Playgroud)

当调试器中断时,我发现看到的count = 'length'不是我期望的数字.

什么给出了什么?什么是完成我明显任务的正确方法.

Bra*_*est 5

在这里工作小提琴.http://jsfiddle.net/MwTuw/2/

诀窍是使用Ember.registerBoundHelper将所有相关数据作为函数的最终参数传递.

Ember.Handlebars.registerBoundHelper('pluralize', function (count) {
  var options = Array.prototype.pop.call(arguments);
  var string = options.data.properties[1];
  return (count > 1 ? string+"s" : string);
});
Run Code Online (Sandbox Code Playgroud)

这消除了{{if controller.length}}其他解决方案所需的hack,并且意味着添加或删除其他对象将相应地更新该值.