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
喜欢
- C1需要的所有代码
- SharedData 的所有代码和要求
- 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);
}
我正在尝试将我的应用程序置于生产模式,我遇到的问题是我的 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
喜欢
- C1需要的所有代码
- SharedData 的所有代码和要求
- 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);
}