我有一组用于计算订单对象价格的汇率,我正在尝试找出使这些汇率在需要的地方可用的最佳方法(模型,基本上只是平面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')
});