Порой вам необходимо загрузить какой либо Store до старта основного приложения, например на основе этих данных должен быть создан той или иной интерфейс. В этой статье я покажу вам, как запускать приложение после загрузки всех глобальных Store.
Процесс загрузки приложение состоит из трех этапов:
- Загрузить RIA: js, css, images и все остальное
- Загрузить глобальные store
- После загрузки всех глобальных сторов, создавать Viewport
Для этого мы расширим класс Ext.app.Application и подпишемся на событие load у store. Инициализация Viewport не выполняется, потому что свойство mainView не установлено, мы установим его с помощью setMainView после окончания загрузки всех глобальных сторов.
Ext.define('app.application', { extend: 'Ext.app.Application', name: 'app', requires: [ 'app.view.Main', 'app.view.InitWindow' ], stores: [ 'Countries0', 'Countries1', 'Countries2', 'Countries3' ], launch: function () { this.getInitWindow().show(); this.initGlobalStoresLoadEvents(); }, initGlobalStoresLoadEvents: function () { var globalStore; Ext.Array.each(this.stores, function (storeClassName) { globalStore = this.getGlobalStoreByClassName(storeClassName); if (globalStore) { globalStore.on( 'load', this.areGlobalStoresLoaded, this, { single: true } ); } }, this); }, areGlobalStoresLoaded: function (store) { var allGlobalStoresLoaded = true, globalStore; this.getInitWindow().setMessage(store.title + " are loaded successfully."); Ext.Array.each(this.stores, function (storeClassName) { globalStore = this.getGlobalStoreByClassName(storeClassName); if (globalStore && !globalStore.isLoaded()) { allGlobalStoresLoaded = false; return false; } }, this); if (allGlobalStoresLoaded) { this.setMainView('app.view.Main'); this.getInitWindow().hide(); } }, getGlobalStoreByClassName: function (className) { var globalStore = className.split('.').pop(); globalStore = Ext.StoreManager.lookup(globalStore); return globalStore; }, getInitWindow: function() { if(!this.initWindow) { this.initWindow = Ext.create('app.view.InitWindow', {}); } return this.initWindow; } }); Ext.application('app.application');
Я вставил число загруженных store в заголовки таблиц, чтобы показать, что представление создается после загрузки store’ов.