从Extjs MVC应用程序到处获取全球变量

时间:2014-07-30 10:56:24

标签: javascript extjs

我正在学习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未定义

有什么想法吗?

1 个答案:

答案 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;
    }
});