我看到了其他类似的问题得到解答,但是我无法获得任何有效的解决方案。例如,一种解决方案是对网格中的记录进行计数,并通过为每个记录调用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));
}
}
}