2013-05-07 17 views

回答

3

您應該聽取rowexpander插件的expandbody事件,並跟蹤最後一個展開的行。每當展開一個新行時,使用toggleRow摺疊先前展開的行。

要切換行:

grid.getPlugin(pluginId).toggleRow(rowIndex) 

找到,如果行被摺疊(改編自RowExpander.js代碼) - 有可能是一個更好的辦法來做到這一點..?

var rowExpander = grid.getPlugin(pluginId); 
var rowNode = grid.getView().getNode(rowIdx); 
var row = Ext.fly(rowNode, '_rowExpander'); 
var isCollapsed = row.hasCls(rowExpander.rowCollapsedCls); 
0

對於Ext 6.0.1以下代碼可能對您有所幫助。我很高興看到有沒有更簡單的方法來做到這一點。

var rowExpander = yourGrid.getPlugin('yourPluginId'); 
var expandedRecords = rowExpander.recordsExpanded; 
var currentExpandedRecord; 
var currentInternalId = 0; // start from 1 
var currentIndex = -1; // start from 0 

for(var prop in expandedRecords) { 
    if(expandedRecords.hasOwnProperty(prop)) { 
     // expandedRecords is storing internal id, 
     // and internal id start form 1 in Ext 6.0.1 
     currentInternalId = parseInt(prop, 10); 

     if(currentInternalId && expandedRecords[prop] === true) { 

      // extjs 6.0.1 store data index start from 0 
      currentExpandedRecord = yourGrid.store.getByInternalId(currentInternalId); 
      currentIndex = yourGrid.store.indexOf(currentExpandedRecord); 
      rowExpander.toggleRow(currentIndex, currentExpandedRecord); 
     } 
    } 
} 

rowExpander.toggleRow(index, record);