我先显示面板 A,然后在其下方显示面板 B。面板 A 使用 JSONP 获取数据并显示在商店加载的回调函数中。所以显示大约需要 1 秒。
我将浮动面板 C 与面板 B 对齐。浮动面板 C 是这样的:
Ext.define('MyApp.view.MyWindow', {
extend: 'Ext.window.Window',
height: 334,
width: 540,
layout: {
type: 'border'
},
title: 'Run report',
initComponent: function () {
var me = this;
floatingpanel = Ext.create('Ext.panel.Panel', {
html: "something",
width: 100,
height: 50,
floating: true,
listeners: {
'show': {
fn: function () {
floatingpanel.alignTo(PanelB, "tr-tr", [left, top]);
},
scope: floatingpanel,
//delay: 1000, // to wait for other component to show
single: true
}
}
});
Ext.applyIf(me, {
items: [{
xtype: 'form',
bodyPadding: 10,
region: 'center'
}]
});
me.callParent(arguments);
}
});
然后floatingpanel.show()
被调用来显示面板。但它没有添加到面板 B。
如果我不使用delay
如上所示,浮动面板 C 出现在面板 A 的某处,因为当浮动面板即将显示时,面板 A 尚不可用。所以我把“延迟”。
1 秒后,面板 A 显示为回调成功。现在浮动面板 C 在正确的位置与面板 B 对齐。
由于回调函数可能在 1 秒或 10 秒内成功,因此延迟时间很难选择。
还有其他方法可以解决这个问题吗?我尝试使用 doConstrain 将浮动面板 C 附加到面板 B: floatingpanel.doConstrain(PanelB)
。但不知何故,它不起作用。