Глобальные константы, где их определить?
Мне нужна глобальная константа
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, время: 11:50. |