我想知道在哪里为ExtJS应用程序添加全局变量。我已经看过stackoverflow中的一些建议,提到你可以在app.js中添加它们。但是,任何人都可以更具体吗?我的app.js看起来像这样:
Ext.application({
launch: function() {..}
});
那么,变量究竟在哪里?在发射功能?在Ext.application
之外?
答案 0 :(得分:12)
更好的方法是创建一个单独的类来保存这样的全局常量。然后你应该把那个常量类放在 app.js 中的需要。
Ext.define("App.Constants", {
singleton : true,
BASE_URL : "http://localhost:8080/",
LABLE_HEADER : "geekrai.blogspot",
TIMEOUT : 6000
});
这将确保加载类,现在您可以访问任何属性/全局值。 我在我的博客上详细提到了相同的内容:link
答案 1 :(得分:7)
声明您自己的对象命名空间并将其添加到那里:
Ext.ns('My.Application.Globals');
My.Application.Globals.SomeValue = 5;
My.Application.Globals.SomeText = 'Hello World!';
然而,除非绝对需要,否则全局变量通常不受欢迎,所以如果可以,请尝试使用它们。
答案 2 :(得分:4)
我知道你已经接受了一个很好的答案。我只是想添加一个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
答案 3 :(得分:3)
除了可以在Ext
中构建的任何功能之外,您始终可以使用立即函数来创建闭包:
(function(){
var globalVariable = 'foo';
Ext.application({
launch: function() { alert(globalVariable); }
});
})();