2012-08-07 53 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