如何在 Ember 应用程序 1.0 后全局提供数据



我有一组用于计算订单对象价格的汇率,我正在尝试找出使这些汇率在需要的地方可用的最佳方法(模型,基本上只是平面Ember.Objects和控制器)。

我已经搜索了很多好的解决方案,有很多旧的代码示例似乎不再有效,也有很多关于依赖注入的讨论,但没有关于如何使用它的好例子。

所以我诉诸于这个,感觉有点脏,但这样我就可以调用窗口。应用程序汇率无论何时我需要它:

var ApplicationController = Ember.Controller.extend({
  init: function() {
    this._super();
    var exchangeRates = new ExchangeRates();
    exchangeRates.refresh();
    this.set('exchangeRates', exchangeRates);
    // Expose the exchangeRates to the global scope.
    window.App.exchangeRates = exchangeRates;
  },
});

更具体地说,我需要将其注入到我的模型中,该模型由路由器创建,如下所示:

var BuyBankTransferIndexRoute = Ember.Route.extend({
  setupController: function (controller) {
    controller.set('model', BuyOrder.create({
      type: 'bank_transfer',
    }));
  }
});

然后绑定到模型内部,如下所示:

var BuyOrder = Ember.Object.extend({
  init: function () {
    // Whenever the currency data reloads.
    window.App.exchangeRates.addObserver('dataLoaded', function () {
      // Trigger a re-calculation of the btcPrice field.
      this.propertyWillChange('currency');
      this.propertyDidChange('currency');
    }.bind(this));
  },
});

有没有更好的方法?我在这里使用带有 Ember 1.2.0 的 Ember 应用程序套件。

我会说你最好的选择是使用控制器的"需求"功能。application控制器上有一个exchangeRates属性。如果你想在posts控制器中拥有该变量,你可以这样做:

App.PostsController = Ember.Controller.extend({
    needs: ['application'],
    exchangeRates: Ember.computed.alias('controllers.application.exchangeRates')
});

相关内容

  • 没有找到相关文章

最新更新