我在我的应用中使用带有嵌套网格的RowExpander插件。我想只展开一行,所以当我点击'+'图标时,所有其他行都必须折叠。我怎么能这样做?
答案 0 :(得分: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);
答案 1 :(得分: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);