我正在学习ExtJs框架4.2.2 MVC,我想获得在Application.js中声明的全局变量:
Ext.define('XApp.Application', {
name: 'XApp',
extend: 'Ext.app.Application',
serverUrl: 'http://localhost:31109/',
requires: [
'XApp.util.Util',
'XApp.util.SessionMonitor'
],
views: [
],
controllers: [
'Login',
'Main',
'Mail'
]
});
我想从任何地方获得 serverUrl ,因为将来我想要更改服务器后端的这个URL。 在“应用程序”扩展类中,我发现了这个var XApp.app.serverUrl 但是从我的商店来看,这种语法不起作用:
Ext.define('XApp.store.Xusers', {
extend: 'Ext.data.Store',
requires: [ 'XApp.model.Xuser'],
model: 'XApp.model.Xuser',
proxy: {
type: 'jsonp',
url: XApp.app.serverUrl + 'Login/Loadusers',
reader: {
type: 'json',
}
},
});
Firebug tellme: TypeError:XApp.app未定义
有什么想法吗?
答案 0 :(得分:1)
您的应用程序需要的东西,需要的东西,最终需要您的XUsers商店。此时,Ext的类经理仍然是构建类等,并且尚未启动您的应用程序;这解释了你的未定义错误。
要解决此问题,您可以在类方法中使用它,该方法必须在应用程序启动后调用,例如在商店的构造函数中:
Ext.define('XApp.store.Xusers', {
extend: 'Ext.data.Store',
requires: [ 'XApp.model.Xuser'],
model: 'XApp.model.Xuser',
constructor: function() {
this.proxy = {
type: 'jsonp',
url: XApp.app.serverUrl + 'Login/Loadusers',
reader: {
type: 'json',
}
};
this.callParent(arguments);
}
});
那就是说,根据你的用例,我想我宁愿定义一个带有URL前缀的自定义代理,如:
Ext.define('XApp.data.proxy.DefaultJsonP', {
extend: 'Ext.data.proxy.JsonP',
alias: 'proxy.xjsonp',
urlPrefix: 'http://localhost:31109/',
reader: {
type: 'json'
},
constructor: function() {
// we want the config to have been applied beforehand this time
this.callParent(arguments);
this.url = this.urlPrefix + this.url;
}
});