1

extjsにはグリッドがあります。このグリッドは**秒ごとに更新されます。グリッドの選択を維持するために、これを使用します。

     Ext.define('PersistantSelectionGridPanel', {
    extend: 'Ext.grid.Panel',
    selectedRecords: [],
    initComponent: function () {
        this.callParent(arguments);

        this.getStore().on('beforeload', this.rememberSelection, this);
        this.getView().on('refresh', this.refreshSelection, this);
    },
    rememberSelection: function (selModel, selectedRecords) {
        if (!this.rendered || Ext.isEmpty(this.el)) {
            return;
        }

        this.selectedRecords = this.getSelectionModel().getSelection();
        this.getView().saveScrollState();
    },
    refreshSelection: function () {
        if (0 >= this.selectedRecords.length) {
            return;
        }

        var newRecordsToSelect = [];
        for (var i = 0; i < this.selectedRecords.length; i++) {
            record = this.getStore().getById(this.selectedRecords[i].getId());
            if (!Ext.isEmpty(record)) {
                newRecordsToSelect.push(record);
            }
        }

        this.getSelectionModel().select(newRecordsToSelect);
        Ext.defer(this.setScrollTop, 30, this, [this.getView().scrollState.top]);
    }
});

しかし、これは1つのグリッドでは機能せず、理由がわかりません。これは更新機能です。

refreshSeconds = refreshRate * 1000;
refreshData = {
    run: function () {
        NL.store.load();
    },
    interval: refreshSeconds
}
Ext.TaskManager.start(refreshData)

そしてこれはグリッドです(列なし)

 var grid = Ext.create('PersistantSelectionGridPanel', {
   autoscroll: true,
    region: 'center',
    store: NL.store,
    multiSelect: false,
    stateful: true,
    loadMask: false,
    stateId: 'stateGridEvents',
    viewConfig: {
        stripeRows: true
    },
    columns: [{

ただし、ストアがリロードされると、選択は失われます。何を変更する必要がありますか?

4

2 に答える 2

1

選択したレコードを取得するには、次を使用します

grid.getSelectionModel().getSelections();

あなたのコードでは、getSelections() に「s」がありませんでした。これにより、スクリプト エラーが発生する可能性があります。

以下の行は、コードを次のように変更する必要があると思います。

Your code::     this.getView().on('refresh', this.refreshSelection, this);
Modified code:  this.getStore().on('afterload', this.refreshSelection, this);

データがロードされた後にレコードが選択されるようにします。

于 2012-08-07T13:01:42.360 に答える
-1

最初に標準機能を使用してみます。

Ext.define('PersistentSelectionGridPanel', {
    extend: 'Ext.grid.Panel',

    viewConfig: {
        preserveScrollOnRefresh: true
    },

    ...
});
于 2012-08-07T16:48:19.940 に答える