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

但这在一个网格中不起作用,我不知道为什么。这是刷新功能:

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 回答