17

私は Sencha ExtJs 4.0.2a で grid.Panel を使用しており、60 秒ごとに Json Store をリロードしています。

データのロード後にスクロールバーの位置を保持する方法があるかどうか疑問に思っていました。
ユーザーがロード前に見ていたレコードを引き続き見ることができるように..

Task を使用してグリッドにデータをリロードします。

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/

ただし、行を選択すると、正しく機能しないようです。これがバグかどうかはわかりません。

「更新」イベントは、次のコードからトリガーされます。

grid.store.loadData(dataToLoad);

「更新」をトリガーする他のイベントを知りません

その他の注意事項 :

  • Ext.toolbar.Pagingが必要でした。私はそれを使用しませんでしたが、1 つ以上の行を選択したときにスクロールの保持が台無しになったので、required から Paging を必ず削除してください。
  • テーブルでbufferedrendererプラグインを同時に使用すると、スクロールの保存が機能しないようです。
  • tablePanel.getView().focusRow(recrow)も興味深いですが、bufferedrenderer では機能しません。
于 2014-12-02T09:47:49.310 に答える
2

preserveScrollOnReloadビュー構成プロパティを使用できます。

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