В моем приложении (ExtJs 4.2.1) есть панель сетки с бесконечной прокруткой, похожая на этот пример. Пользователь может нажать кнопку обновления, после чего строки сетки должны быть обновлены данными из БД. Я вызываю store.load () в обработчике кнопки обновления, и мои данные обновляются. Это хорошо работает для первых строк панели сетки (записи со страницы 1). Но не работает, если пользователь пролистал сетку вниз. После store.load сетка сбрасывает положение прокрутки вверх.
Я прошу решения перезагрузить магазин и обновить сетку, которая сохраняет текущий выбор, а также текущую позицию прокрутки. Хорошая новость: у меня есть глобальный индекс каждой записи в магазине.
Вот мой код, в БД тысячи записей.
Панель сетки:
Ext.define('MyApp.view.MyGrid', {
extend: 'Ext.grid.Panel',
requires:[ 'Ext.grid.plugin.BufferedRenderer'],
alias: 'widget.myGrid',
plugins: 'bufferedrenderer',
loadMask: true,
selModel: {
mode: 'MULTI',
pruneRemoved: false
},
itemSelector: 'div.workspaceItemSelector',
overItemCls: 'workspaceItemMouseOver',
trackOver: true,
autoScroll: true,
verticalScroller: { variableRowHeight: true },
defaultSortOrder: 'ASC',
// and some column definitions ...
});
Магазин:
Ext.define('MyApp.store.MyStore', {
extend: 'Ext.data.Store',
autoLoad: false,
buffered: true,
pageSize: 100,
leadingBufferZone: 100,
remoteSort: true,
model: 'MyApp.model.MyModel',
storeId: 'myStore',
proxy: {
type: 'rest',
url: 'someUrl',
reader: { type: 'json', totalProperty: 'total', root: 'items' }
}
});
Существует решение для небуферизованных сеток, которое мне не подходит.