ExtJS 6 plugin.rowwidget调整网格上的行主体组件调整大小

ExtJS 6 plugin.rowwidget调整网格上的行主体组件调整大小,extjs,extjs6,Extjs,Extjs6,我有一个网格。调整栅格大小后,展开的行主体构件仍保留原点宽度。我如何解决这个问题 作为临时解决方案,我添加了resize事件处理程序,如下所示 listeners: { resize: function (grid) { Ext.each(grid.query('characterPanel'), function (rowBodyComponent) {

我有一个网格。调整栅格大小后,展开的行主体构件仍保留原点宽度。我如何解决这个问题

作为临时解决方案,我添加了
resize
事件处理程序,如下所示

            listeners: {
                resize: function (grid) {
                    Ext.each(grid.query('characterPanel'), function (rowBodyComponent) {
                        //if(rowBodyComponent.isVisible()) does not work
                        //rowBodyComponent.updateLayout(); does not work
                        rowBodyComponent.setWidth('100%');
                    });
                }
            }
但对我来说,这似乎是个糟糕的解决方案。此外,它也有一个问题-所有的行主体组件都根据其可见性调整了大小,如果有许多折叠(展开后)的行,可能会影响我的应用程序的性能

有什么想法吗


下面说明了我的问题和我已经尝试过的方法。

向插件添加ID:

{
    ptype: 'rowwidget',
    id: 'rowwidget',
    widget: {
        xtype: 'characterPanel',
        bind: {},
    }
}
然后您可以通过给定的id获取插件:

grid.getPlugin('rowwidget');
此插件包含一个名为recordsExpanded的属性。 它包含扩展记录的所有内部ID以及扩展的当前状态

在onResize函数中,可以执行以下操作:

let plugin = grid.getPlugin('rowwidget');
if (plugin && plugin.recordsExpanded) {
    for (let internalId in plugin.recordsExpanded) {
        let record = grid.store.getByInternalId(internalId);
        if (!Ext.isEmpty(record)) {
            plugin.getWidget(grid.getView(), record).setWidth('100%');
        }
    }
}
但是您应该在函数调用中添加延迟(至少为1),以确保完成调整大小

listeners: {
    resize: {
        delay: 1,
        fn: function() {
            // do stuff
        }
    }
}
在没有延迟的情况下,小部件有时在将行变大后不会调整大小。

要添加到@xhadon中,您还可以使用
引用执行以下操作。因此,您不需要检查插件是否存在或是否已扩展,因为它将
未定义
,并且函数将返回

视图控制器 看法
谢谢顺便说一句,我认为你可以使用
findPlugin()
而不是
getPlugin()
,如果可能的话,我宁愿避免使用
id
。另外,如果(!Ext.isEmpty(record))
,我也不明白使用
的意义,在什么情况下它可能是空的?我不知道
findPlugin()
谢谢!如果删除记录,则记录可能为空;如果将BufferedStore与
purgePageCount结合使用,则重新加载的存储
listen: {
    component: {
        '#my-grid': {
            resize: 'onResize'
        }
    }
},

onResize: function() {
    const me = this,
        rowWidget = me.getView().lookup('rowWidget');

    if (! rowWidget) {
        return
    }

    rowWidget.setWidth('100%');
}

plugins: {
    rowwidget: {
        widget: {
            xtype: 'myrowwidget',
            reference: 'rowWidget',
            bind: {
                store: '{record.children}'
            }
        }
    }
}