Ember.js Ember 1.13-全局变量更改时重新计算帮助程序
我得到了一个“get text”助手,它根据配置变量ENV.LOCALE转换我的静态字段 问题是,如果我的ENV.LOCALE被修改,我想重新计算我的。我尝试了几件事,从发送事件到Ember.observer,都没有成功Ember.js Ember 1.13-全局变量更改时重新计算帮助程序,ember.js,Ember.js,我得到了一个“get text”助手,它根据配置变量ENV.LOCALE转换我的静态字段 问题是,如果我的ENV.LOCALE被修改,我想重新计算我的。我尝试了几件事,从发送事件到Ember.observer,都没有成功 // controllers/application.js locale: function() { var locale = this.get('isFrench') === true ? 'fr' : 'en'; ENV.LOCALE = locale;
// controllers/application.js
locale: function() {
var locale = this.get('isFrench') === true ? 'fr' : 'en';
ENV.LOCALE = locale;
return locale;
}.property('isFrench'),
//helpers/get-text.js
import Ember from 'ember';
import ENV from '../config/environment';
export default Ember.Helper ( function(key, locale) {
var lang = {
save: {
'fr': 'Enregistrer',
'en': 'Save',
},
}
return new Ember.Handlebars.SafeString(lang[key][ENV.LOCALE]);
});
一句话,当全局属性更改时,如何重新计算助手?在查看文档后。结合这一点,我提出了以下解决方案: 首先,我创建了一个服务“区域设置管理器” 然后,我将我的服务注入我的助手,并在每次更改locale属性时重新计算它
// helpers/get-text.js
import Ember from 'ember';
export default Ember.Helper.extend({
localeManager: Ember.inject.service(),
onLocaleChange: Ember.observer('localeManager.locale', function() {
this.recompute();
}),
compute(params) {
var key = params[0];
var lang = {
enregistrer: {
'fr': 'Enregistrer',
'en': 'Save',
},
var locale = this.get('localeManager.locale');
return new Ember.Handlebars.SafeString(lang[key][locale]);
}
});
您是否希望在生产服务器运行时更新您的配置/环境环境?那是不可能的。即使在开发过程中,配置/环境更改通常也需要重新启动ember服务器。也许你想在某个ED模型中放置一个区域设置,并为用户保留它?@Gaurav这是我自己一直在思考的另一个问题,如果我更改环境是“错误的”(页面将根据元标记ENV.locale进行加载和设置)。然而,一旦它被加载,我希望能够在全球范围内访问它。让我们把它在ENV中的事实放在一边,有可能重新计算一个全局属性吗?我想。但是你会如何测试它呢?在不重新启动服务器的情况下无法更改属性。在我展示的代码片段中,我实际展示了一个如何执行此操作的示例。
// helpers/get-text.js
import Ember from 'ember';
export default Ember.Helper.extend({
localeManager: Ember.inject.service(),
onLocaleChange: Ember.observer('localeManager.locale', function() {
this.recompute();
}),
compute(params) {
var key = params[0];
var lang = {
enregistrer: {
'fr': 'Enregistrer',
'en': 'Save',
},
var locale = this.get('localeManager.locale');
return new Ember.Handlebars.SafeString(lang[key][locale]);
}
});