extjs rowexpander插件:每次展开一行

时间:2013-05-07 13:40:54

标签: extjs grid row expand collapse

我在我的应用中使用带有嵌套网格的RowExpander插件。我想只展开一行,所以当我点击'+'图标时,所有其他行都必须折叠。我怎么能这样做?

2 个答案:

答案 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);