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}'
}
}
}
}