我看到了其他类似的问题得到解答,但是我无法获得任何有效的解决方案。例如,一种解决方案是对网格中的记录进行计数,并通过为每个记录调用expandRow(rowNumber)来循环。但是,我在ExtJs 4.2中使用的rowexpander没有此功能。

最佳答案

我扩展了benjamincunningham的解决方案,并添加了一个辅助函数。
代码被设置为独立功能,因此您可以在需要的地方使用它们。

接受2个参数:网格对象:Ext.getCmp('gridId')或任何网格引用
                    :boolean表示扩展:true表示全部扩展,false表示崩溃

function getRowExpander(plugins){
var plugin;
  var length = plugins.length;
  for(var i =0; i < length; i++){
     if(plugins[i].ptype == 'rowexpander'){
        plugin = plugins[i];
        i = length; // ghetto loop exit
         }
   }
return plugin;
}

function toggleAll(grid, expand){
    expand = typeof expand !== 'undefined' ? expand : expand;


        var rowExpander = getRowExpander(grid.plugins);
        var nodes = rowExpander.view.getNodes();

        var length = nodes.length;
    for (var i = 0; i < length; i++) {
        var node = Ext.fly(nodes[i]);

        if (node.hasCls(rowExpander.rowCollapsedCls) === expand) {
            rowExpander.toggleRow(i, grid.store.getAt(i));
        }
    }
}

07-26 02:43