Переопределение remote компонентов

Ситуация такая: Компоненты ExtJS (разметка) подгружаются с удаленного сервера, a внести изменения в них нет возможности.

Для решения данной задачи можно воспользоваться переопределением класса Ext.app.Application

 /**
* Переопределен для поддержки "переопределения" компонентов
* @override
* @class IServ.Developer.overrides.app.Application
*/
Ext.define('IServ.Developer.overrides.app.Application', {
override: 'Ext.app.Application',

/**
* Папка по умолчанию для хранения компонентов, которые были переопределены
* @type {string}
* @default "mock"
*/
DEFAULT_MOCK_FOLDER: 'mock', (1)

/**
* массив переопределенных компонентов
* @type {string[]}
*/
mocks: [], (2)

/**
* Перед запуском приложения. Загружаем компоненты которые должны быть переопределены
* @override
*/
onBeforeLaunch: function () { (3)
if (this.mocks.length > 0) {
this.loadMocks(this.mocks);
}

this.callParent(arguments);
},

privates: {
/**
* загрузка переопределенных компонентов
* @param {string[]} items массив записей
*/
loadMocks: function (items) { (4)
var ns = Utilits.getConf('remote_namespace');
for (var i in items) {
var item = items[i].replace(ns + '.', '');
var xhr = new XMLHttpRequest();
xhr.open('GET', 'mock/' + item.replace(/\./g, '/') + '.js', false);
xhr.send();
if (xhr.status != 200) {
console.debug('Ошибка загрузки переопределения: ' + xhr.status + ' - ' + xhr.statusText);
} else {
console.debug(items[i] + ' переопределен');
eval(xhr.responseText);
}
}
}
}
});

По умолчанию поиск компонентов будет производиться в каталоге (1) mock

Структура каталога
Файл для переопределения

Компоненты которые требуется переопределить указываются в массиве (2) mocks.

Обработка mock-файлов произойдет перед готовностью (launch) приложения (3).

Загрузка файлов (4) происходит СИНХРОННО!!! Применение данного механизме в production версии может уменьшить производительность.

Данная реализация уже включена в пакет developer_package

Print Friendly, PDF & Email

Добавить комментарий