17

我在 Sencha ExtJs 4.0.2a 中使用grid.Panel,每 60 秒重新加载一次 Json Store。

我想知道是否有办法在数据加载后保留滚动条的位置。
这样用户就可以继续查看他在加载之前查看的记录..

我使用任务重新加载网格中的数据:

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);

数据加载后,滚动条位置重置为顶部。

Q:有没有办法在数据加载后保持滚动条位置?

提前致谢!

4

3 回答 3

20

试试这个坏男孩在刷新时保持滚动位置:

http://docs-devel.sencha.com/extjs/4.2.1/#!/api/Ext.grid.View-cfg-preserveScrollOnRefresh

这适用于我的树视图。

viewConfig: {
   preserveScrollOnRefresh: true
}
于 2012-10-30T23:25:51.750 回答
8

以下是在 Grid 中使用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。
于 2014-12-02T09:47:49.310 回答
2

您可以使用preserveScrollOnReload视图配置属性:

viewConfig: {
    preserveScrollOnReload: true
},
于 2016-01-20T12:14:41.407 回答