![](/img/trans.png)
[英]ExtJS 6 plugin.rowwidget Get binded record upon row body component creation
[英]ExtJS 6 plugin.rowwidget Resize row body component on grid resize
我有一個帶有Ext.grid.plugin.RowWidget的網格。 當網格調整大小時,展開的行主體組件保持原點寬度。 我該如何解決這個問題?
作為臨時解決方案,我添加了如下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的屬性。 這包含擴展記錄的所有internalIds以及擴展的當前狀態。
在您的 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 的回答中,您還可以使用reference
執行以下操作。 因此,您無需檢查插件是否存在或已擴展,因為它將是undefined
並且函數將返回。
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}'
}
}
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.