extjs4检查窗口';s最后一个子组件afterlayout事件

extjs4检查窗口';s最后一个子组件afterlayout事件,layout,extjs,extjs4,window,extjs4.2,Layout,Extjs,Extjs4,Window,Extjs4.2,我被指派创建一个extjs4应用程序,可以在桌面浏览器和移动浏览器上使用。我知道extjs4并不真正适用于移动设备(当然适用于移动设备,但性能差异很大),但我们也支持移动网站的临时使用(未来计划:我们将创建一个Sencha Touch 2版本) 无论如何,我目前正在努力提高应用程序的响应能力。在按钮点击、打开窗口等方面的响应。我想在打开Ext.Window组件时显示一条启动消息。在创建窗口的所有组件之前,此启动消息将一直可见。因此,我试图通过收听窗口的afterlayout事件来实现这一点 在扩

我被指派创建一个
extjs4
应用程序,可以在桌面浏览器和移动浏览器上使用。我知道extjs4并不真正适用于移动设备(当然适用于移动设备,但性能差异很大),但我们也支持移动网站的临时使用(未来计划:我们将创建一个
Sencha Touch 2
版本)

无论如何,我目前正在努力提高应用程序的响应能力。在按钮点击、打开窗口等方面的响应。我想在打开
Ext.Window
组件时显示一条启动消息。在创建窗口的所有组件之前,此启动消息将一直可见。因此,我试图通过收听窗口的
afterlayout
事件来实现这一点

在扩展
Ext.Window
的自定义组件上,我有以下代码:

constructor : function() {
    var me = this;
    ...

    me.callParent(arguments);

    me.on('afterlayout', {
        console.log('AFTER LAYOUT');

        if (mySplash != null)
            mySplash.hide();
    }
}
我观察到,
afterlayout
事件被多次调用。所以,我已经检查过了。上面写着:

当关联的布局管理器排列此容器中的组件时激发

那么,如何检查窗口/弹出窗口的最后一个
afterlayout
事件?我需要这个,如果我已经确定了,我可以在这里调用我的closesplash函数

请帮忙。提前谢谢。

你试过了吗?
根据文档,组件完成渲染后afterRender将触发..

如果是窗口,则可以使用
show
事件,该事件在窗口准备就绪并显示后立即触发。请注意以下链条:

实例化->渲染->布局->显示

这对所有组件都有效

  • show总是触发一次(但由于性能原因,并非所有组件都会触发事件)
  • 版面每次版面需要更正某些内容时,都会触发事件。但最初(通常)只有一次。如果这种情况发生多次,则很可能是子级在创建时或在用户交互后触发其父级的布局
  • 渲染始终触发一次,直到显式触发重新渲染,但这种情况并不经常发生
因此,为了在窗口准备好之前显示任何内容,我会在创建窗口之前应用它,或者由调用方在window initComponent方法中应用,或者如果您更经常需要它,也可以使用插件来实现。这三个选项都可以创建show listener(您可以管理侦听器,也可以使用
{single:true}
应用它),从而再次消除更多飞溅。

作为一种解决方法,可以使用,工作示例如下:


想法是在最后一个afterLayout上执行延迟的任务,这听起来像是您需要的事件,而不是
afterrender

是的,但是
afterrender
afterLayout
之前首先被调用,这就是为什么我试图捕捉
afterLayout
而不是
afterrender
。@JNERC是正确的。我一直在试验这一点,并观察到当调用
afterrender
时,并非所有组件都已放置/布局在窗口上。