Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ember.js/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ember.js Ember 1.13-全局变量更改时重新计算帮助程序_Ember.js - Fatal编程技术网

Ember.js Ember 1.13-全局变量更改时重新计算帮助程序

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;

我得到了一个“get text”助手,它根据配置变量ENV.LOCALE转换我的静态字段

问题是,如果我的ENV.LOCALE被修改,我想重新计算我的。我尝试了几件事,从发送事件到Ember.observer,都没有成功

// 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]);
    }
});