Глобальные константы, где их определить?
Мне нужна глобальная константа
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"
]
}
При таком подходе вам никогда не нужно будет мучаться головной болью от глобальных констант, случайно протёкших в боевую сборку. |
Цитата:
|
Не просто возможно, но и есть официально рекомендованный правильный способ делать любые условные изменения в коде, зависящие от внешних факторов навроде типа сборки и т.д. Например, локализация тоже так делается, см. KitchenSink.
|
Перенес все свои оверрайты сюда:
"overrides": [
"overrides/common"
],
Прописал для разных сборок следующее:
"production": {
...
"overrides": [
"overrides/common",
"overrides/production"
]
},
"development": {
...
"overrides": [
"overrides/common",
"overrides/development"
]
},
Строку ${app.dir}/ убрал, так как еще с прошлого раза она вызывает у команды sencha app watch понос. Проблема, если сборочные "overrides": [ убрать, то все работает как раньше. Но если вставить, то будто бы этих оверайтов нет. В общем что-то не работает. А что - не ясно. Причем sencha app watch не ругается. . |
Никто не знает как решить эту проблему?
|
Я думаю, такие вопросы лучше задавать в сенчовом форуме. Мои познания в этой теме уже исчерпаны, дальше пойдёт только глухой (и очень медленный) телефон. :(
|
|
Заработал вот такой вариант:
app.json
"overrides": [
"overrides/common",
"overrides/${build.environment}"
],
|
| Часовой пояс GMT +3, время: 09:26. |