EXTJS 4 构建,未调用单例?

EXTJS 4 build , singleton not called?

我正在尝试将我的应用程序置于生产模式,我遇到的问题是我的 js 代码一直抱怨缺少 javascript 对象而不是 运行,

在我的 app.js 我有这个

requires: [
    "FleetM.utility.SharedData"
],

并且此共享数据在所有控制器中使用,并被视为名称为 SharedData 的单例,但在构建之后,缩小后的 js 一直说 SharedData 丢失,但如果我将它放在控制台中,它会打印所有值,即使我使用未压缩的 js 结果相同,这是我的 SharedData class

Ext.define('FleetM.utility.SharedData', {
    alternateClassName: 'SharedData',
    singleton: true,
    'PreventALLUpdateDelete': 0,
    'vehicles_creation': 0,
 //..... alot of varibles here 
    'appSettings': 0,
    'user': 0,
    'i18n': 0,
    success_load: false,
    'comWizard': 0,
    constructor: function () {

        Ext.Ajax.request({
            url: "USERS/GetAccessLevelData",
            method: 'GET',
            scope: this,
            success: function (response, opts) {
                var data = Ext.decode(response.responseText, true);
                try {
                    SharedData.user = data;
                    SharedData.user.Connected=1;
                } catch (err) {
                }

                try {
                    SharedData.PreventALLUpdateDelete = data.PreventALLUpdateDelete;
                    SharedData.vehicles_creation = data.vehicles_creation;

                    var language = SharedData.user.language;
                } catch (err) {
                }


                switch (language) {
                    case '0':
                        language = "En";
                        break;
                    case '1':
                        language = "Ar";
                        break;
                    default:
                        language = "En";
                        break;
                }

                this.LoadI18n(language);
                success_load: true;
            },
            failure: function (err) {
                //Ext.MessageBox.alert(SharedData.i18n.Reports.ErrorMsg, SharedData.i18n.Reports.tryAgain);
            }
        });

    },
    LoadI18n: function (language) {
        var me = this;

        Ext.Ajax.request({
            url: "data/i18n" + language + ".json",
            method: 'GET',
            scope: this,
            success: function (response, opts) {
                var data = Ext.decode(response.responseText, true);
                try {
                    SharedData.i18n = data;
                } catch (err) {
                }
                me.success_load = true;
            },
            failure: function (err) {
                //Ext.MessageBox.alert(SharedData.i18n.Reports.ErrorMsg, SharedData.i18n.Reports.tryAgain);
            }
        });
    }
});

----更新----

I have done add requires for all controllers , and views , it still complain

看看下面的图片,

您必须将它添加到每个 class 的 requires 数组中,以使其对所有对象都可用。 仅将它放在您的 app.js.

中是不够的

在开发模式下,缺少的 class 可以动态加载,但在生产模式下 app.js 所有要求都按需要的顺序附加。

例如:requires["C1", "FleetM.utility.SharedData", "C2"]

会导致app.js喜欢

  1. C1需要的所有代码
  2. SharedData 的所有代码和要求
  3. C2 的所有代码和要求

当 C1 需要 SharedData 来实现其功能时,它也必须需要它,否则 SharedData 对 C1 来说是不可用的。

更新

您无法在 class 配置期间访问单例 FleetM.utility.SharedData,因为它在那个时候没有初始化。

您应该可以在商店的 constructor 方法中访问它。

constructor: function() {
    this.data = [
        id: 0,
        name: SharedData.i18n.configuration.Type_Vehicles
    ];
    this.callParent(arguments);
}