2012-12-13 33 views
7

我想知道在哪裏爲ExtJS應用程序添加全局變量。我已經在stackoverflow中看過一些建議,提到你可以在app.js中添加它們。但是,任何人都可以更具體嗎?我的app.js看起來是這樣的:在ExtJS MVC中添加全局變量的位置?

Ext.application({ 

    launch: function() {..} 

}); 

那麼,變量的確切位置呢?在發射功能?外Ext.application

+0

相關:http://stackoverflow.com/questions/9261458/where-should-i-define-global-functions-in-extjs-4-mvc – Qtax

回答

6

聲明自己的對象命名空間,並添加它們有:

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

My.Application.Globals.SomeValue = 5; 
My.Application.Globals.SomeText = 'Hello World!'; 

不過,除非絕對需要,否則全局變量通常會被忽略,所以如果可以的話,儘量避免使用它們。

+0

好建議:) – LPD

2

除了任何功能可以內置到Ext,您可以隨時使用即時函數來創建一個封閉:

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

    Ext.application({ 

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

    }); 

})(); 
+0

@ alex23 - **是**。在'Ext.application'中創建的任何函數*關閉*該外部匿名函數中聲明的任何變量。 –

+1

你需要var。如果你拋棄了var,那麼閉包的整個點都是沒有意義的。 – Lloyd

+0

@ alex23 - 你是什麼意思var是默認的'私人'關鍵字'?這並不意味着JavaScript中的任何內容。 –

3

我知道你已經接受了一個很好的答案。我只是想添加一個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 
10

更好的方法是創建一個單獨的類來保存這樣的全局常量。那麼你應該把這個常量類作爲要求app.js

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

     BASE_URL : "http://localhost:8080/", 
     LABLE_HEADER : "geekrai.blogspot", 
     TIMEOUT : 6000 
}); 

這將確保類已加載,現在您可以訪問任何屬性/全局值。 我剛纔提到的細節同樣在我的博客:link

+0

您的博客文章幫助了我。謝謝!如果你把代碼放在這裏 - 就可以了。 –

+0

當然,我有代碼以及:) –