在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)无法解析字符串以从源代码中提取所有本地化字符串。
答案 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