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

Art*_*t F 9 javascript extjs extjs4 extjs-mvc

我想知道在哪里为ExtJS应用程序添加全局变量.我已经看过stackoverflow中的一些建议,提到你可以在app.js中添加它们.但是,任何人都可以更具体吗?我的app.js看起来像这样:

Ext.application({

    launch: function() {..}

});
Run Code Online (Sandbox Code Playgroud)

那么,变量到底在哪里呢?在发射功能?在外面Ext.application

rai*_*mar 13

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

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

         BASE_URL : "http://localhost:8080/",
         LABLE_HEADER : "geekrai.blogspot",
         TIMEOUT : 6000 
 });
Run Code Online (Sandbox Code Playgroud)

这将确保加载类,现在您可以访问任何属性/全局值.我在我的博客上已经详细提到过:链接


Llo*_*oyd 7

声明自己的对象命名空间并将其添加到那里:

Ext.ns('My.Application.Globals');

My.Application.Globals.SomeValue = 5;
My.Application.Globals.SomeText = 'Hello World!';
Run Code Online (Sandbox Code Playgroud)

然而,除非绝对需要,否则全局变量通常都会被不满,所以如果可以的话,尽量使用它们.


dbr*_*rin 5

我知道您已经接受了一个很好的答案。我只是想添加一种 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
    }
});
Run Code Online (Sandbox Code Playgroud)

要使用这些应用程序范围的变量,您需要引用应用程序名称空间,因此不会污染全局空间。像这样:

MyApp.app.gloabals.magicNum
Run Code Online (Sandbox Code Playgroud)