在ember.js中创建自定义未绑定帮助程序

时间:2014-04-07 18:21:37

标签: ember.js localization handlebars.js

在ember.js应用程序中,我创建了一个用于文本本地化的自定义帮助程序。具体来说,它通过Jed传递给助手的值,这是一个gettext样式的文本翻译库,如下所示:

Ember.Handlebars.helper('_', function(value, options) {
    return Lang.gettext(value); 
});

在我的模板中:

{{_ "Translate Me"}}

问题是ember将此渲染为绑定帮助器,即渲染的文本值被<script id="metamorph-*">标记包围,但由于值永远不会改变,我希望它们不被绑定以避免额外的开销和标记。

在API文档中,我确实看到了解决方法:

  

{{unbound}}帮助程序可以与绑定的帮助程序调用一起使用,以它们的未绑定形式呈现它们,例如。

但是我更喜欢将我的帮助器全局定义为未绑定帮助器的方法,这样我就不必为每个本地化字符串键入{{unbound _ "Foo"}}。更不用说执行此操作会导致我使用的库(xgettext-template)无法解析字符串以从源代码中提取所有本地化字符串。

2 个答案:

答案 0 :(得分:2)

快速回答,如果您没有为您的功能绑定属性,可以使用registerHelper

Ember.Handlebars.registerHelper('_', function(value, options) {
    return value + 'moo';
});

答案 1 :(得分:1)

万一你可能需要这个。

从另一个把手助手召唤把手助手

Ember.Handlebars.helper('_', function(value, options) {
    return Lang.gettext(value);
});

Ember.Handlebars.registerHelper('i18n', function(value, options){
    var args = Array.prototype.slice.call(arguments, 1);
    args.unshift(value);
    args.unshift('_');
    return Ember.Handlebars.helpers.unbound.apply(this, args);

});

像这样使用{{i18n "Translate Me"}}

这里是JSBin