【问题标题】:Can Ember Handlebars helper observe global object's property?Ember Handlebars 助手可以观察全局对象的属性吗?
【发布时间】:2013-09-09 14:24:37
【问题描述】:

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

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

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

【问题讨论】:

    标签: ember.js handlebars.js


    【解决方案1】:

    我通过复制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);
      });
    

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

    【讨论】:

    • 这对我来说似乎是一个非常好的方法!这是具有该实现的jsbin。它似乎像一个魅力。 jsbin.com/ucanam/967/edit
    • 老兄,说真的,你摇滚!
    【解决方案2】:

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

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

    只需点击foo 0.xxx 即可查看更改。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-06-17
      • 2018-11-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-09-07
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多