Преамбула
Ext JS 4 представляет разработчикам много новых возможностей, в числе которых, например, большое количество новых графиков и диаграмм. Сравните — для четвертой версии приведено 22 примера использования элементов Chart против всего четырех примеров для третьей версии. Внушающе, не правда ли?
Однако что, если в наличии есть большое приложение, реализованное на третьей версии Ext JS и возникает необходимость использования некоторых виджетов четвертой версии? Например, типична ситуация, когда в приложение нужно добавить новые диаграммы, но переписывать всё на «четверку» нецелесообразно.
К счастью, разработчики фреймворка позаботились об этом. Ext JS 4 полностью изолирован, что позволяет использовать четвертую версию наравне с третьей в пределах одной страницы! Чтобы продемонстрировать эту возможность на боевом примере, авторами фреймворка был создан пример, добавляющий в Ext JS 3 приложение новые диаграммы четвертой версии. Итак, что для этого нужно?
Как сделать?
Во-первых, необходимо подключить к HTML странице так называемую песочницу (sandbox) Ext JS 4, включающую в себя CSS и JS файл: ext-sandbox.css и ext-all-sandbox.js. Обратите внимание, что подключение песочницы необходимо проводить после подключения третьей версии фреймворка.
Во-вторых, обертку Ext.onReady(...) необходимо заменить на Ext4.onReady(...). Это позволит использовать новые возможности четвертого Ext JS в рамках приложения третьей версии.
В-третьих, для новых виджетов необходимо использовать новые хранилища Store. Например, так выглядит ArrayStore:
myStore = Ext4.create('store.array', {
idIndex: 0,
fields: [
'id', 'company', 'money',
],
data: [
[
1, 'ЗАО "Рога и копыта"', 100000
],
[
2, 'ИП Пупкин', 12000
],
[
3, 'ООО "Вася и компания"', 45000
]
]
});
И, наконец, в-четвертых, не забываем при создании новых виджетов писать Ext4.blablabla вместо Ext.blablabla.
Пример хочу!
В качестве примера вставим диаграмму четвертой версии Ext JS в старую Ext JS 3 страницу. Создадим HTML документ, подключим третью версию Ext JS и два файла песочницы Ext JS 4, указанные выше. Затем приступим к написанию нашего гибридного приложения — его код ниже.
// Ext4.onReady(...), не Ext.onReady(...)
Ext4.onReady(function(){
// конфигурируем хранилище, которое
// будет использовать Grid (Ext JS 3) и Chart (Ext JS 4)
var companiesStoreConfig = {
idIndex: 0,
fields: [ 'id', 'company', 'money' ],
data: [
[ 1, 'ЗАО "Рога и копыта"', 51000 ],
[ 2, 'ИП Пупкин', 12000 ],
[ 3, 'ООО "Вася и компания"', 43000 ],
[ 4, 'ОАО "Зеленые перцы"', 31000 ],
[ 5, 'ООО "Рьяные программисты"', 9000 ]
]
};
// обратите внимание - для создания хранилища используем Ext4,
// так как хранилище будет использоваться виджетами
// и третьей, и четвертой версии. Если хранилище используется
// виджетами только третьей версии - можно оставить Ext.
var companiesStore = new Ext4.data.ArrayStore(companiesStoreConfig);
// определяем таблицу (Ext JS 3)
var grid = new Ext.grid.GridPanel({
store: companiesStore, // хранилище для таблицы
columns: [ // колонки таблицы
{
id :'company',
header : 'Компания',
sortable : true,
dataIndex: 'company'
},
{
header : 'Деньги',
width : 70,
sortable : true,
dataIndex: 'money'
}
],
renderTo: 'gridDiv',
autoExpandColumn: 'company',
width: 350, autoHeight: true,
border: false, frame: false,
title: 'Компашки'
});
// определяем диаграмму (Ext JS 4)
var chart = Ext4.createWidget('panel', {
width: 795, height: 440,
renderTo: 'chartDiv',
border: false, frame: false,
layout: 'fit',
items: [{
xtype: 'chart',
store: companiesStore,
legend: { field: 'company', position: 'right' },
theme: 'Base:gradients',
series: [{
type: 'pie', donut: 35,
field: 'money',
showInLegend: true,
label: {
field: 'company',
display: 'rotate', contrast: true, font: '12px Arial',
renderer: function(v){ return ''; }
}
}]
}]
});
});
Приведенный код создаст таблицу, используя Ext JS 3, и диаграмму, используя Ext JS 4. Обратите внимание на тот факт, что при создании виджетов четвертой версии фреймворка внутри его описания можно использовать только компоненты четвертой версии. Например, в приведенном примере внутри описания диаграммы Chart нельзя написать
{
...
renderTo: Ext.getBody()
...
}
но можно:
{
...
renderTo: Ext4.getBody()
...
}
Соблюдайте эти правила — это позволит вам использовать новый функционал Ext JS 4 в пределах существующего Ext JS 3 приложения.
Используемый материал: