在 ExtJS MVC 中添加全局变量的位置



我想知道在哪里为 ExtJS 应用程序添加全局变量。我已经在stackoverflow中查看了一些建议,这些建议提到您可以在app.js中添加它们。但是,谁能更具体一点?我的应用程序.js看起来像这样:

Ext.application({
    launch: function() {..}
});

那么,变量究竟去了哪里呢?在启动功能中?外面Ext.application

更好的方法是创建一个单独的类来保存这样的全局常量。然后,您应该根据需要将该常量类放在app.js中。

Ext.define("App.Constants", {
         singleton  : true,   
         BASE_URL : "http://localhost:8080/",
         LABLE_HEADER : "geekrai.blogspot",
         TIMEOUT : 6000 
 });

这将确保类被加载,现在您可以访问任何属性/全局值。我在我的博客上详细提到了同样的事情:link

声明您自己的对象命名空间并将它们添加到其中:

Ext.ns('My.Application.Globals');
My.Application.Globals.SomeValue = 5;
My.Application.Globals.SomeText = 'Hello World!';

然而,除非绝对需要,否则全局变量通常是不受欢迎的,所以如果可以的话,试着使用它们。

我知道你已经接受了很好的答案。我只是想添加一种 MVC 方法来包含应用程序可用的命名空间变量。这些"全局变量"有一个警告 - 你不能在你的类定义中使用它们。这意味着您不能在Ext.define({})方法中引用您的应用程序。它们必须在initComponent方法或更高版本中使用。

所以我是这样做的:

Ext.application({
    name:'MyApp',
    appFolder:'js/app',
    controllers:[ 'Main' ],
    autoCreateViewport : true,
    launch:function () {
        console.log("App Launched!");
        MyApp.app = this;   //added this to get reference to app instance. IMPORTANT!    
    }, 
    //variables used throughout the app
    globals:{
        myURL:'http://example.com',
        magicNum:5
    }
});

若要使用这些应用程序范围的变量,请引用应用命名空间,因此不会污染全局空间。喜欢这个:

MyApp.app.gloabals.magicNum

除了可能内置到Ext中的任何功能之外,您始终可以使用即时函数来创建闭包:

(function(){
    var globalVariable = 'foo';    
    Ext.application({
        launch: function() { alert(globalVariable); }
    });
})();

最新更新