2012-08-07 52 views
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: [{ 

但是当商店被重载的选择都将丢失。我需要改变什么?

+0

您使用的4.1.1?如果是的话,这是一个引入到这个版本的错误 - 它在4.1.0中不存在;让我知道你是否希望我发布一个可能的修复。 – Izhaki 2012-08-07 14:41:13

+0

@Izhaki,你可以请你发布你的可能修复?我似乎偶然发现了这个错误。 – 2012-08-23 16:49:16

回答

0

我会尝试使用标准的第一特征:

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

    viewConfig: { 
     preserveScrollOnRefresh: true 
    }, 

    ... 
}); 
+3

这个答案不正确。使用此选项不会保留选择。 – 2015-03-18 13:59:00

1

要获得所选记录使用

grid.getSelectionModel().getSelections(); 

在代码中, 'S' 是getSelections失踪()。你可能会得到一个脚本错误。

我觉得下面的一行代码应修改为,

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

,使数据被加载后的记录都被选择。

+0

您也可以尝试在网格面板的viewready()事件中选择记录 – AJJ 2012-08-08 09:29:05