【发布时间】:2014-03-21 22:31:48
【问题描述】:
我正在制作一个把手助手来简化 Ember 应用程序的翻译。它需要能够绑定到一个计数选项,因为计数会随着时间而变化,并且翻译需要根据计数是复数还是单数。
例如:
{{i18n translation.key countBinding='numberCount'}}
会去语言文件看看
translation: {
key: {
'one': 'widget',
'other': 'widgets'
}
}
并且会根据numberCount的值返回'widget'或'widgets'
这是帮助程序的代码:
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,它可以正常工作,只是不会绑定到选项。但是当我尝试使它成为绑定助手时(如上面的代码),应用程序将无法加载,并且控制台给我错误“Uncaught TypeError: Object # has no method 'split'”
这里是 Ember.Handlebars.registerBoundHelper 的文档:http://emberjs.com/api/classes/Ember.Handlebars.html#method_registerBoundHelper
【问题讨论】:
标签: javascript ember.js internationalization handlebars.js