我正在开发一个简单的Ember应用程序,它从API中检索所有语言字符串。我已经用translate()
方法设置了一个服务,并将该服务注入到一个助手中。问题是,我想使用的属性在助手中不可用,因为当它被使用时,承诺还没有实现。在从服务加载属性后,我如何在助手中访问该属性?
服务(应用程序/服务/i18n.js):
export default Ember.Service.extend({
locales: null,
init() {
this._super();
Ember.$.getJSON('/api/recruiting/locales').then(function (response) {
this.set('locales', response.data);
}.bind(this));
},
translate(key) {
// This causes the problem: locales property has not been loaded yet at this point
return this.get('locales.' + key);
}
});
帮助程序(app/helpers/translate.js):
export default Ember.Helper.extend({
i18n: Ember.inject.service(),
compute(params/*, hash*/) {
var i18n = this.get('i18n');
return i18n.translate(params[0]);
}
});
2条答案
按热度按时间x7yiwoj41#
我刚找到一个“解决方案”。每次“locales”属性更改时,我都会重新计算助手。下面是助手的外观:
z6psavjg2#
注意观察器被认为是不好的做法,所以你需要在
i18n
服务中实现某种类型的更改监听器来触发i18n.locales
变量中的更改。