Javascript 如何使ExtJs RowExpander仅在某些行上显示图标([+;])?

Javascript 如何使ExtJs RowExpander仅在某些行上显示图标([+;])?,javascript,extjs,extjs4,extjs4.2,Javascript,Extjs,Extjs4,Extjs4.2,我正在使用RowExpander显示有关网格中每一行的附加信息。某些行没有任何其他信息。对于这些行,如何使展开图标(加号)不被渲染?是否有一个可以像过滤器一样使用的功能 我在这里看到了一个类似的问题,它说有一个名为renderer()的函数,但我尝试了,但没有被调用。我想出了一个解决问题的方法。我扩展了RowExpander插件,复制并粘贴了getHeaderConfig函数到我的新插件中。这使我能够对renderer函数进行必要的更改,以检查每个记录是否在rowBody/rowExpander

我正在使用RowExpander显示有关网格中每一行的附加信息。某些行没有任何其他信息。对于这些行,如何使展开图标(加号)不被渲染?是否有一个可以像过滤器一样使用的功能


我在这里看到了一个类似的问题,它说有一个名为renderer()的函数,但我尝试了,但没有被调用。

我想出了一个解决问题的方法。我扩展了RowExpander插件,复制并粘贴了getHeaderConfig函数到我的新插件中。这使我能够对renderer函数进行必要的更改,以检查每个记录是否在rowBody/rowExpander中显示任何内容

Ext.define('MyApp.plugins.RowExpander', {
    extend: 'Ext.grid.plugin.RowExpander',
    alias: 'plugin.rowexpanderplus',
    getHeaderConfig: function () {
        var me = this;

        return {
            width: 24,
            lockable: false,
            sortable: false,
            resizable: false,
            draggable: false,
            hideable: false,
            menuDisabled: true,
            tdCls: Ext.baseCSSPrefix + 'grid-cell-special',
            innerCls: Ext.baseCSSPrefix + 'grid-cell-inner-row-expander',
            renderer: function (value, metadata, record, a, b, store, grid) {
                if (record.data.notes.length === 0) {
                    return '<div></div>';
                }

                // Only has to span 2 rows if it is not in a lockable grid.
                if (!me.grid.ownerLockable) {
                    metadata.tdAttr += ' rowspan="2"';
                }
                return '<div class="' + Ext.baseCSSPrefix + 'grid-row-expander" role="presentation"></div>';
            },
            processEvent: function (type, view, cell, rowIndex, cellIndex, e, record) {
                if (type == "mousedown" && e.getTarget('.' + Ext.baseCSSPrefix + 'grid-row-expander')) {
                    me.toggleRow(rowIndex, record);
                    return me.selectRowOnExpand;
                }
            }
        };
    }
});
Ext.define('MyApp.plugins.RowExpander'{
扩展:“Ext.grid.plugin.RowExpander”,
别名:“plugin.rowexpanderplus”,
getHeaderConfig:函数(){
var me=这个;
返回{
宽度:24,
可锁定:错误,
可排序:false,
可调整大小:false,
可拖动:错误,
可隐藏的:错误,
menuDisabled:没错,
tdCls:Ext.baseCSSPrefix+“特殊网格单元”,
innerCls:Ext.baseCSSPrefix+“网格单元内部行扩展器”,
渲染器:函数(值、元数据、记录、a、b、存储、网格){
if(record.data.notes.length==0){
返回“”;
}
//如果不在可锁定网格中,则只需跨2行。
如果(!me.grid.ownerLockable){
metadata.tdAttr+=“rowspan=“2”;
}
返回“”;
},
processEvent:函数(类型、视图、单元格、行索引、单元格索引、e、记录){
if(type==“mousedown”和&e.getTarget('.'.+Ext.baseCSSPrefix+'grid row expander')){
切换行(行索引,记录);
返回我。选择RowOnexpand;
}
}
};
}
});

这不是我想要做的,但我查看了插件的源代码,发现没有办法钩住渲染器。

我建议使用
var me=This,x=me.callParent(参数);x、 渲染器=函数()。。。;如果确实只更改了渲染器,则返回x
。这样,迁移到较新的ExtJS版本可能不会那么痛苦。