Начал писать продолжение статьи и с ужасом понял, что я всё забыл 8).
Приходится всё по новой вспоминать и понимать.
Заранее прошу не судить строго, я с javascript дела раньше не имел, в основном пишу на C#. Код родился в процессе изучения ExtJS и javascript.
Создаем пустую модель
Model = Ext.define('Table', { extend : 'Ext.data.Model' });
Модель (Ext.data.Model) необходима для описания формата полей, так сказать структуры нашей таблицы. В нашем случае она пустая, вся структура будет задаваться динамически, при загрузке файлов dbf. Нами только присвоено имя для модели “Table”
Создаем Store (хранилище данных). Store отвечает за извлечение и сохранение данных, по формату привязанной к нему модели.
store = Ext.create('Ext.data.Store', { model : Model, //наша модель pageSize : 20, proxy : { type : 'ajax', url : 'get_data.php', extraParams : { filename : filename_ }, reader : { type : 'json', root : 'records', totalProperty : 'total' } } });
Прогнозируем на будущее, что загружаемые таблицы будут иметь слишком много строк, чтобы показать все на одной странице. Grid Panel поддерживает метод подгрузки(дозагрузки) с помощью панели инструментов, которая загружает данные постранично с помощью спец кнопок предыдущая/следующая. Эта возможность называется Paging. Для настройки Paging необходимо у Store прописать pageSize и настроить reader c totalProperty.
Разберем поподробней:
pageSize : 20 — размер страницы, именно по 20 записей будет выдавать наш store
proxy определяет откуда Store будет получать данные:
proxy : { type : 'ajax', url : 'get_data.php', extraParams : { filename : filename_ }
В нашем случае это ajax запрос с адресом ‘get_data.php’, c указанием дополнительного параметра: filename – имя текущего фала. Вот как выглядит запрос в режиме Инструменты разработчика в Google Chrome:
В нашем случае наш сервер возвращает JSON, поэтому мы создали Json reader чтобы прочитать ответ:
reader : { type : 'json', root : 'records', totalProperty : 'total' }
totalProperty указывает reader-у, где можно получить в ответ общее число строк в JSON.
Переходим к созданию Grid:
grid = Ext.create('Ext.grid.Panel', { store : store, invalidateScrollerOnRefresh : false, disableSelection : true, //Запретим выделять forceFit : false, dockedItems : [{ xtype : 'pagingtoolbar', //Компонент Paging store : store, //наш Store dock : 'bottom', //Располагаться будет внизу displayMsg : 'Показано {0} - {1} of {2}', //Формат отображения emptyMsg : 'Нечего отображать', displayInfo : true, //Показывать ил информацию listeners:{ beforechange : function() { store.getProxy().extraParams.filename = filename_; } } }], columns : [{}], //пустое описание колонок height : 210 //высота });
Указали откуда Grid будет брать данные – из нашего store. Пристыковываем компонент Paging к нашему гриду. Дополнительно обрабатываем событие beforechange у paging:
listeners:{ beforechange : function() { store.getProxy().extraParams.filename = filename_; }
Этот «костыль» сделан для того чтобы в запросе от paging передавалось имя файла.
В следующий раз создадим наше главное окно и загрузим данные.
P.S. Мало времени, поэтому разбил на маленькие статьи (
P.S.S. в следующей части будут полные исходники