我想知道在哪裏爲ExtJS應用程序添加全局變量。我已經在stackoverflow中看過一些建議,提到你可以在app.js中添加它們。但是,任何人都可以更具體嗎?我的app.js看起來是這樣的:在ExtJS MVC中添加全局變量的位置?
Ext.application({
launch: function() {..}
});
那麼,變量的確切位置呢?在發射功能?外Ext.application
?
我想知道在哪裏爲ExtJS應用程序添加全局變量。我已經在stackoverflow中看過一些建議,提到你可以在app.js中添加它們。但是,任何人都可以更具體嗎?我的app.js看起來是這樣的:在ExtJS MVC中添加全局變量的位置?
Ext.application({
launch: function() {..}
});
那麼,變量的確切位置呢?在發射功能?外Ext.application
?
聲明自己的對象命名空間,並添加它們有:
Ext.ns('My.Application.Globals');
My.Application.Globals.SomeValue = 5;
My.Application.Globals.SomeText = 'Hello World!';
不過,除非絕對需要,否則全局變量通常會被忽略,所以如果可以的話,儘量避免使用它們。
好建議:) – LPD
除了任何功能可以內置到Ext
,您可以隨時使用即時函數來創建一個封閉:
(function(){
var globalVariable = 'foo';
Ext.application({
launch: function() { alert(globalVariable); }
});
})();
@ alex23 - **是**。在'Ext.application'中創建的任何函數*關閉*該外部匿名函數中聲明的任何變量。 –
你需要var。如果你拋棄了var,那麼閉包的整個點都是沒有意義的。 – Lloyd
@ alex23 - 你是什麼意思var是默認的'私人'關鍵字'?這並不意味着JavaScript中的任何內容。 –
我知道你已經接受了一個很好的答案。我只是想添加一個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。
Ext.define("App.Constants", {
singleton : true,
BASE_URL : "http://localhost:8080/",
LABLE_HEADER : "geekrai.blogspot",
TIMEOUT : 6000
});
這將確保類已加載,現在您可以訪問任何屬性/全局值。 我剛纔提到的細節同樣在我的博客:link
您的博客文章幫助了我。謝謝!如果你把代碼放在這裏 - 就可以了。 –
當然,我有代碼以及:) –
相關:http://stackoverflow.com/questions/9261458/where-should-i-define-global-functions-in-extjs-4-mvc – Qtax