Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/431.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/extjs/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 在ExtJS MVC中在哪里添加全局变量?_Javascript_Extjs_Extjs4_Extjs Mvc - Fatal编程技术网

Javascript 在ExtJS MVC中在哪里添加全局变量?

Javascript 在ExtJS MVC中在哪里添加全局变量?,javascript,extjs,extjs4,extjs-mvc,Javascript,Extjs,Extjs4,Extjs Mvc,我想知道在哪里为ExtJS应用程序添加全局变量。我已经看过stackoverflow中的一些建议,其中提到可以将它们添加到app.js中。但是,谁能说得更具体一点呢?我的app.js看起来像这样: Ext.application({ launch: function() {..} }); 那么,变量到底去了哪里?在启动功能中?在Ext.application?之外,除了Ext中可能内置的任何功能外,您始终可以使用即时函数创建闭包: (function(){ var glob

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

Ext.application({

    launch: function() {..}

});

那么,变量到底去了哪里?在启动功能中?在
Ext.application

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

(function(){
    var globalVariable = 'foo';    

    Ext.application({

        launch: function() { alert(globalVariable); }

    });

})();

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

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

更好的方法是创建一个单独的类来保存这样的全局常量。然后,您应该在app.js中将常量类设置为requires

Ext.define("App.Constants", {
         singleton  : true,   

         BASE_URL : "http://localhost:8080/",
         LABLE_HEADER : "geekrai.blogspot",
         TIMEOUT : 6000 
 });
这将确保类已加载,现在您可以访问任何属性/全局值。
我在我的博客上也详细提到了这一点:

@alex23-是的。在
Ext.application
中创建的任何函数都会关闭在该外部匿名函数中声明的任何变量。您需要var。如果删除var,则整个关闭点都没有意义。@alex23-默认情况下,
var是“private”关键字
,这是什么意思?这在JavaScript中并没有任何意义。@Lloyd-是的,如果我在上面删除var,那么
globalVariable
将是一个隐式全局变量。这是不好的。关键是,如果你删除var,它的作用域将被限定到窗口,并污染该对象。通过保持var和使用闭包,它的作用域可以扩展到任何直接的和内部的函数。非常感谢。如果你把代码放在这里就好了——答案里。