Глобальные константы, где их определить?
Мне нужна глобальная константа
var SERVER_URL_PREFIX = "http://localhost:3000"; но где ее прописать, чтобы она была видна везде? в Application.js не вышло дело. В моделях не видно. в app.js тоже самое, этот файл похоже вообще последний в списке сборки. Идеально было бы в app.json, но какая директива отвечает за это? И есть ли такая вообще? |
Присоединяюсь к вопросу. Я себе завел синглтон с константами, но их видно только в рантайме.
|
Что такое рантайм???
|
Так а в чем проблема брать из синглтона ?
ExtJS Globals in MVC Example |
Или вариант другой.. я использую так:
Ext.define('MyApp.util.Config', {
singleton : true,
config : {
debug : true
},
constructor : function(config) {
this.initConfig(config);
this.callParent([config]);
}
});
ну и где нужно делаем require, используем.. MyApp.util.Config.getDebug(); |
|
Мда... Я явно что то делал не так. Вот попробовал по этим статьям, и все работает. Но тем не менее точно помню что была некая проблема из-за которой я не смог использовать константы на этапе сборки. Ну ок, может еще вспомню что там было. А сейчас оно работает так:
Завожу синглтон
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,
...
});
|
Кстати, напомню, что нужно чтобы значение глобальных констант зависело от режиме сборки: production, development, и т.п.
Кроме //<debug> есть что-то более внятное? |
Глобальные приложения, включая константы, это не тот инструмент, который я стал бы использовать в своих приложениях. Лучше используйте 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"
]
}
При таком подходе вам никогда не нужно будет мучаться головной болью от глобальных констант, случайно протёкших в боевую сборку. |
Цитата:
|
| Часовой пояс GMT +3, время: 18:07. |