Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 11.07.2016, 16:43
Аспирант
Отправить личное сообщение для Moloch Посмотреть профиль Найти все сообщения от Moloch
 
Регистрация: 29.10.2013
Сообщений: 94

Как асинхронной подгрузить компонент
Здравствуйте, Мне нужно асинхронно запустить приложение. Сейчас это делается в файле app.js
/**
 * Иницализация загруженных классов 
 *
 */
Ext.onReady(function() {

    og.Localizator.init()
        .then(function() {
            // контроль доступа
            Ext.define('og.override.Component', {
                override: 'Ext.Component',
                listeners: {
                    beforerender: function() {
                        if (this.ogAccessPath) {
                            console.log('this.ogAccessPath', this.ogAccessPath);
                        }
                        return U.access.testByName(this);
                    },
                },
            });
        })
        .then(function() {
            var c = og.widgets.themechanger.ThemeChangerController;
            c.changeThemeGlobal();
        })
        .then(function() {
            Ext.QuickTips.init();
            Ext.window.MessageBox.prototype.closeToolText = L({ ru: 'Закрыть панель', en: 'Close panel' });
            Ext.setGlyphFontFamily(Glyphs.DEFAULT_FONT_FAMILY);
        })
        .then(createApp)['catch'](function(err) {
            console.error(err);
            alert('app start has failed');
        });
});


/**
 * Запуск приложения
 *
 */
function createApp() {
    Ext.application({
        name: 'og',
        extend: 'og.Application',
        requires: [
            'og.view.main.Main'
        ],

    mainView: 'og.view.main.Main'    
}

Можно ли вынести инициализацию загруженных классов в отдельный файл, например в Application.js и в какое место?
Ответить с цитированием
  #2 (permalink)  
Старый 15.07.2016, 16:33
Аватар для nohuhu
Профессор
Отправить личное сообщение для nohuhu Посмотреть профиль Найти все сообщения от nohuhu
 
Регистрация: 21.05.2015
Сообщений: 321

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

Хотя каноничного подхода не существует, единственный практически доступный подход, на мой взгляд, таков:

а) Используйте декларативный подход по-максимуму
б) Создавайте классы собственных виджетов с нужной конфигурацией вместо конфигурирования экземпляров
ц) Не морочтесь загрузкой "только нужных" классов, это ересь и с точки зрения безопасности, и с точки зрения производительности
д) Создавайте полную сборку JavaScript со всеми классами вашего приложения и фреймворка
е) Валидируйте каждый чих на сервере. Иначе будет ад и хаос.
ф) После загрузки приложения и аутентификации пользователя запрашивайте с сервера большой JSON с конфигурацией дерева виджетов, и скармливайте его в Ext.create() или Ext.widget()

Только так вы можете быть уверены в том, что пользователь видит только те элементы UI, которые ему положены по уровню авторизации.

Если паранойя спать не даёт, то можно сделать несколько сборок приложения, по количеству основных уровней авторизации. В каждую сборку будут входить, соответственно, только те классы, которые потенциально доступны данному уровню. Но этот подход оправдан, только если абсолютно необходим и есть понимание, какой ценой в поддержке он будет даваться.

У меня перед глазами были примеры, когда люди не то, что сборки JavaScript по уровням доступа разбивали, но и Direct API с сервера тоже отдавали под аутентификацию и с доступом в зависимости от уровня, чтобы "лишнее не светить". Это работает, но неизвестно, насколько такая паранойя оправдана с точки зрения безопасности.

P.S. По странному совпадению, декларативные классы также и тестировать гораздо легче. Двух зайцев, да? :)
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
компонент пользовательского интерфейса Makcuk Элементы интерфейса 4 14.01.2014 15:38
Разметка для Google closure compiler monolithed Оффтопик 11 04.09.2013 00:50
Управление скроллом "а-ля тач" HonesT Элементы интерфейса 2 27.08.2013 14:25
Решение проблемы кодировок для AJAX и PHP без iconv (cp1251 в AJAX) Serge Ageyev AJAX и COMET 10 24.04.2013 20:48
Как сделать как в JQ? faforty Общие вопросы Javascript 8 14.11.2011 01:35