ExtJS浮动面板出现在错误的位置,因为上面的其他组件需要时间来显示

时间:2013-02-01 02:58:37

标签: javascript extjs position floating

我首先显示面板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()来显示面板。但它没有添加到Panel B.

如果我不使用如上所示的delay,浮动面板C出现在面板A的某处,因为当浮动面板即将显示时,面板A尚不可用。所以我把“延迟”。

1秒后,面板A显示为回调成功。现在,浮动面板C在适当的位置与面板B对齐。

由于回调功能可能在1秒或10秒内成功,因此很难选择延迟时间。

还有其他方法可以解决这个问题吗?我尝试使用doConstrain将浮动面板C附加到面板B:floatingpanel.doConstrain(PanelB)。但不知怎的,它没有用。

1 个答案:

答案 0 :(得分:0)

initComponent: function () {
    var me = this;
    floatingpanel = Ext.create('Ext.panel.Panel', {
        html: "something",
        width: 100,
        height: 50,
       // floating: true,
        listeners: {
            'show': {
                fn: function () {
                    me.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);
}
  

请使用上面的代码而不是..