この例のように、アプリ (ExtJs 4.2.1) に無限スクロール グリッド パネルがあります。ユーザーが更新ボタンをクリックすると、DB からのデータでグリッドの行を更新する必要があります。更新ボタン ハンドラーで store.load() を呼び出すと、データが更新されます。これは、グリッド パネルの最初の行 (ページ 1 のレコード) でうまく機能します。ただし、ユーザーがグリッドを下にスクロールした場合は機能しません。store.load の後、グリッドはスクロール位置を一番上にリセットします。
ストアをリロードし、現在の選択と現在のスクロール位置を保持するグリッドを更新するソリューションを求めています。良い点: ストア内の各レコードのグローバル インデックスがあります。
これが私のコードです。DBには何千ものエントリがあります。
グリッド パネル:
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' }
}
});
バッファリングされていないグリッドの解決策がありますが、私にはうまくいきません。