ExtJs grid.Panel store: сохранить положение полосы прокрутки после загрузки/перезагрузки - программирование

ExtJs grid.Panel store: сохранить положение полосы прокрутки после загрузки/перезагрузки

Я использую grid.Panel в Sencha ExtJs 4.0.2a, и я перезагружаю Json Store каждые 60 секунд.

Мне было интересно, есть ли способ сохранить положение полосы прокрутки после загрузки данных.
Чтобы пользователь мог продолжить просмотр записей, которые он просматривал до загрузки.

Я перезагружаю данные в сетке с помощью задачи:

var task = {
    run: function(){
        Ext.getCmp(panelGridId).getStore().load({
            //Callback function after loaded records
            callback: function(records) {
                //Hide grid if empty records
                if (Ext.isEmpty(records)) {
                    Ext.getCmp(panelGridId).setVisible(false);
                }
                else {
                    if (Ext.getCmp(panelGridId).isHidden()) {
                        Ext.getCmp(panelGridId).setVisible(true);
                        Ext.getCmp(panelGridId).doComponentLayout();
                    }
                }
            }
        });
    },
    interval: 60000 //60 seconds
};

Ext.TaskManager.start(task);

После загрузки данных позиция полосы прокрутки reset вверху.

Q: Есть ли способ сохранить позицию полосы прокрутки после загрузки данных?

Спасибо заранее!

4b9b3361

Ответ 2

Здесь вы можете использовать preserveScrollOnRefresh в своей сетке:

Ext.define('js.grid.MyGrid', {

    extend: 'Ext.grid.Panel',

    viewConfig: {
        preserveScrollOnRefresh: true
    }

Здесь JSFiddle, который демонстрирует это:

http://jsfiddle.net/cdbm6r0o/7/

Однако, когда вы выбираете строку, похоже, что она работает неправильно. Я не уверен, что это ошибка.

Событие 'refresh' запускается из этого кода:

grid.store.loadData(dataToLoad);

Я не знаю никаких других событий, которые вызывают "обновление"

Дополнительные примечания:

  • У меня была Ext.toolbar.Paging как необходимость. Несмотря на то, что я не использовал его, он прикрутил резервную копию прокрутки, когда у меня было одно или несколько выбранных строк, поэтому убедитесь, что вы удалили пейджинг из своего места.
  • Сохранение прокрутки не работает, если я использую плагин bufferedrenderer в таблице одновременно.
  • tablePanel.getView(). focusRow (recrow) также интересно посмотреть, но также не работает с bufferedrenderer.

Ответ 3

Вы можете использовать свойство конфигурации preserveScrollOnReload вида:

viewConfig: {
    preserveScrollOnReload: true
},