Javascript-форум (https://javascript.ru/forum/)
-   ExtJS (https://javascript.ru/forum/extjs/)
-   -   Глобальные константы, где их определить? (https://javascript.ru/forum/extjs/63096-globalnye-konstanty-gde-ikh-opredelit.html)

khusamov 17.05.2016 14:37

Глобальные константы, где их определить?
 
Мне нужна глобальная константа
var SERVER_URL_PREFIX = "http://localhost:3000";
но где ее прописать, чтобы она была видна везде?

в Application.js не вышло дело. В моделях не видно.

в app.js тоже самое, этот файл похоже вообще последний в списке сборки.

Идеально было бы в app.json, но какая директива отвечает за это? И есть ли такая вообще?

Infarch 17.05.2016 15:19

Присоединяюсь к вопросу. Я себе завел синглтон с константами, но их видно только в рантайме.

khusamov 17.05.2016 15:30

Что такое рантайм???

kolka 17.05.2016 17:56

Так а в чем проблема брать из синглтона ?
ExtJS Globals in MVC Example

kolka 17.05.2016 18:07

Или вариант другой.. я использую так:
Ext.define('MyApp.util.Config', {
    singleton : true,

    config : {
        debug : true
    },

    constructor : function(config) {
        this.initConfig(config);
        this.callParent([config]);
    }
});


ну и где нужно делаем require, используем..

MyApp.util.Config.getDebug();

kolka 17.05.2016 18:14

Вот еще статейка на эту тему

Infarch 18.05.2016 11:14

Мда... Я явно что то делал не так. Вот попробовал по этим статьям, и все работает. Но тем не менее точно помню что была некая проблема из-за которой я не смог использовать константы на этапе сборки. Ну ок, может еще вспомню что там было. А сейчас оно работает так:

Завожу синглтон
Ext.define('SafetyRound.util.Constants', {
	singleton: true,
	alternateClassName: 'Constants',
	
	ui: 'rib-panel-embedded'
		
});


Подключаю его в апликейшене
Ext.define('SafetyRound.Application', {
	extend: 'Ext.app.Application',
	name: 'SafetyRound',
	
	requires: [
		'SafetyRound.util.Constants'
	]
});


И использую где надо
Ext.define('SafetyRound.view.projectinfo.Main', {
	extend: 'Ext.tab.Panel',

	ui: Constants.ui,

	...

});

khusamov 18.05.2016 12:10

Кстати, напомню, что нужно чтобы значение глобальных констант зависело от режиме сборки: production, development, и т.п.

Кроме //<debug> есть что-то более внятное?

nohuhu 18.05.2016 21:20

Глобальные приложения, включая константы, это не тот инструмент, который я стал бы использовать в своих приложениях. Лучше используйте override.

Если ваш код выглядит примерно так:

Ext.define('My.app.Proxy', {
    extend: 'Ext.data.proxy.Ajax',
    alias: 'proxy.myproxy',

    url: '/production/url'
});

Ext.define('My.app.Store', {
    extend: 'Ext.data.Store',

    proxy: 'myproxy'
});


Тогда можно добавить override, который будет включаться только в dev и testing сборках:

Ext.define('My.app.debug.Proxy', {
    override: 'My.app.Proxy',

    url: '/dev/url'
});


Самый простой способ включить такие override в отдельные сборки приложения, это держать файлы override в отдельной директории, которая включается только в нужных сборках через app.json:

"development": {
    "overrides": [
        "${app.dir}/debug-overrides"
    ]
},

"testing": {
    "overrides": [
        "${app.dir}/debug-overrides"
    ]
}


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

khusamov 19.05.2016 13:47

Цитата:

Глобальные приложения, включая константы, это не тот инструмент, который я стал бы использовать в своих приложениях. Лучше используйте override.
А я и не знал что такое возможно делать. Надо попробовать. Спасибо!


Часовой пояс GMT +3, время: 11:50.