Ember.js Handlebars BoundHelper Uncaught TypeError:Object#<object>没有方法&#39; split&#39; </object>

时间:2014-03-21 22:31:48

标签: javascript ember.js internationalization handlebars.js

我正在制作一个把手助手,以简化Ember应用程序的翻译。它需要能够绑定到计数选项,因为计数会随着时间的推移而变化,并且根据计数,翻译需要是复数或单数。

例如:

{{i18n translation.key countBinding='numberCount'}}

将转到语言文件并查看

translation: {
  key: {
    'one': 'widget',
    'other': 'widgets'
  }
}

并将返回'widget'或'widgets',具体取决于numberCount

的值

以下是帮助程序的代码:

Ember.Handlebars.registerBoundHelper('i18n', function(property, options) {
  var params = options.hash,
    self = this;

  // Support variable interpolation for the options
  Object.keys(params).forEach(function(key) {
    params[key] = Em.Handlebars.get(self, params[key], options);
  });

  // Coerce number-like strings into numbers
  if (params.count && !isNaN(params.count) && typeof(params.count) == "string") {
    params.count = Number(params.count);
  }

  // I18n is the library that powers the translation
  return I18n.t(property, params);
});

如果我使用Ember.Handlebars.registerHelper代替registerBoundHelper,它可以正常工作,它只是不会绑定到该选项。但是当我尝试使它成为绑定帮助器时(如上面的代码中所示),应用程序将不会加载,并且控制台会给我错误“未捕获的TypeError:对象#没有方法'拆分'”

以下是Ember.Handlebars.registerBoundHelper的文档:http://emberjs.com/api/classes/Ember.Handlebars.html#method_registerBoundHelper

1 个答案:

答案 0 :(得分:0)

如果我们替换

,它会起作用吗?
var params = options.hash

var params = options.hash.boundOptions

{{i18n translation.key countBinding='numberCount'}}

{{i18n translation.key count=numberCount}}

? 它适用于我的测试环境。