Где добавить глобальные переменные в ExtJS MVC?

мне интересно, где добавить глобальные переменные для приложения ExtJS. Я уже посмотрел на некоторые предложения в stackoverflow, которые упоминают, что вы можете добавить их в приложение.js. Но может ли кто-нибудь быть более конкретным? Мое приложение.js выглядит примерно так:

Ext.application({

    launch: function() {..}

});

Итак, куда именно идут переменные? В функции запуска? За пределами Ext.application?

4 ответов


объявите собственное пространство имен объектов и добавьте их туда:

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

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

однако глобалы обычно хмурятся, если это не абсолютно необходимо, поэтому попробуйте обойти их, если сможете.


лучшим подходом было бы создать отдельный класс для хранения таких глобальных констант. Тогда вы должны просто поместить этот класс констант как требует на app.js.

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

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

это гарантирует, что класс загружен, и теперь вы можете получить доступ к любому свойству / глобальному значению. То же самое я подробно упомянул в своем блоге : ссылке


Я знаю, что вы уже приняли ответ, который в порядке. Я просто хотел добавить способ 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

помимо любых функций, которые могут быть встроены в Ext, вы всегда можете использовать немедленную функцию для создания закрытия:

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

    Ext.application({

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

    });

})();