Sencha Touch - 在测试和生产版本中找不到全局变量

时间:2014-04-13 18:44:23

标签: javascript extjs sencha-touch global-variables sencha-cmd

在使用Cmd 4进行生产或测试构建之后,我似乎无法访问Ext.application中的全局变量。这在第一次应用程序启动期间发生。我已经阅读过其他类似的主题但是没有什么新内容可以解决我的问题。

在我开始使用Cmd之前,我会从服务器上针对应用程序目录运行我的应用程序,并且运行正常。我的其他文件拾取全局变量没有问题。

现在我已经转到Cmd 4 / ST2.3.1,测试和生产版本被内置到一个大的app.js文件中。因此,当js文件中较早的代码调用全局变量时,似乎无法找到它,并出现控制台异常:

未捕获的TypeError:无法读取属性' targetServer'未定义的

这在首次启动应用程序时发生,应用程序只是挂起。甚至没有删除装载指示器。我注意到Ext.application代码位于app.js的末尾。可能是某些代码在应用程序完全加载之前启动了吗?

在我的app.js中,我有以下内容。这是我在第76623行的app.js中的最后一个。未读取的全局变量是" targetServer":

Ext.application({
    name: 'qxtapp',
    targetServer: 'http://192.168.1.70:8080'
    ...
});

我的一家商店看起来像这样。这是我得到例外的地方。以下代码在我的app.js中较早,在第70742行:

Ext.define('qxtapp.store.AccountsListStore', {
    extend  :  Ext.data.Store ,
    xtype   : 'accountsListStore',
    config: {
        model: 'qxtapp.model.AccountsList',
        data: [
            { accountName: qxtapp.app.targetServer+'/account_one' },
        //                 ^ Causes exception- cannot read property "targetServer" 
        //                   of undefined
            { accountName: qxtapp.app.targetServer+'/account_two' },
            ...
        ]
    }
})

知道我在这里失踪的是什么吗?非常感谢任何帮助。

谢谢!

1 个答案:

答案 0 :(得分:1)

这是一个操作顺序错误。

开发中,首先运行 Ext.application()代码(在app.js中),因为已加载任何其他类(例如qxtapp.store.AccountsListStore)浏览器物理读取app.js后动态显示。

但是当您使用Cmd将类捆绑在一起时,浏览器会立即完全读取生成的单个JS文件。会发生什么呢? Ext.define()方法都运行在 Ext.application()之前...所以 qxtapp.app isn&#39尚未分配。

解决此问题的最简单方法是使用真正的全局变量,而不仅仅是分配给全局" app" object(在app.js中):

var TARGET_SERVER = 'http://192.168.1.70:8080';

Ext.application({
    //...
})

在你的其他班级......

Ext.define('qxtapp.store.AccountsListStore', {
    extend  :  Ext.data.Store ,
    xtype   : 'accountsListStore',
    config: {
        model: 'qxtapp.model.AccountsList',
        data: [
            { accountName: TARGET_SERVER + '/account_one' }
            //...
        ]
    }
});