我有一个Handlebars助手来显示i18n标签。 我希望这个助手能够观察全局对象的属性并更改标签 动态,如果该属性的值更改。我一直在尝试这样的事情但到目前为止没有运气:
Ember.Handlebars.registerBoundHelper('t', function(key) {
return I18n.t(key);
}, 'App.i18nHelper.locale');
有没有办法让我的UI动态更改所有i18n标签? 谢谢!
答案 0 :(得分:3)
我通过复制Ember.Handlebars.registerBoundHelper
Ember.Handlebars.registerBoundHelper('t', function(key, options) {
var currentContext = (options.contexts && options.contexts[0]) || this;
var view = options.data.view;
var bindView = view.get('_childViews.lastObject');
view.registerObserver(currentContext, 'App.i18nHelper.locale', bindView, bindView.rerender);
return I18n.t(key);
});
虽然这是hacky的方式,恕我直言..
答案 1 :(得分:1)
我不认为这对助手有用。我通过在全局属性上设置观察者然后强制重新渲染Ember.View.views
中的所有视图来实现此功能。我说“sorta”因为它适用于全局var的第一次更改,但是在第二次更改时视图完全空白。
http://jsbin.com/ucanam/965/edit
只需点击foo 0.xxx
即可查看更改。
我很想知道为什么它在第二次运行时变得空白......