4

我有一个 Handlebars 助手来显示 i18n 标签。我希望这个助手观察全局对象的属性并在该属性的值发生变化时动态更改标签。我一直在尝试这样的事情,但到目前为止还没有运气:

  Ember.Handlebars.registerBoundHelper('t', function(key) {
    return I18n.t(key);   
  }, 'App.i18nHelper.locale');

有什么方法可以让我的 UI 动态更改所有 i18n 标签?谢谢!

4

2 回答 2

4

我通过复制部分内部结构让它工作了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);
  });

虽然这是一种骇人听闻的方式,恕我直言..

于 2013-09-10T04:39:58.807 回答
1

我认为这对助手不起作用。我通过在全局属性上设置观察者然后强制重新渲染Ember.View.views. 我说“sorta”是因为它适用于全局变量的第一次更改,但是在第二次更改时视图完全空白。

http://jsbin.com/ucanam/965/edit

只需单击foo 0.xxx即可查看发生的更改。

我很想知道为什么它在第二次运行时变为空白...

于 2013-09-10T04:12:25.647 回答