1

我被分配创建一个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事件已被多次调用。所以,我检查了Sencha ExtJS 4.2 关于 Ext.Window 的后布局事件的 api 文档。它说:

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

那么,我将如何检查afterlayout我的窗口/弹出窗口的最后一个事件?我需要这个,以便如果我确定了这一点,我可以在这里调用我的关闭启动函数。

请帮忙。提前致谢。

4

4 回答 4

1

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

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

这对所有组件都有效!

  • show总是触发一次(但由于性能原因,并非所有组件都会触发事件)
  • 每次布局需要更正某些内容时,都会触发布局事件。但最初(通常)只有一次。如果这种情况不止一次发生,则很可能一个子级在创建时或在用户交互之后触发其父级的布局。
  • 渲染总是被触发一次,直到重新渲染被明确触发,但这并不经常发生。

因此,要在窗口准备好之前显示任何内容,我会在创建窗口之前由调用者在窗口 initComponent 方法中应用它,或者如果您更频繁地需要它,您也可以使用插件来实现。所有三个选项还可以创建显示侦听器(您应该管理侦听器或使用它应用它{single:true})再次删除更多的飞溅。

于 2013-10-14T08:19:00.580 回答
1

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

于 2013-10-11T08:46:56.373 回答
0

听起来boxready是您需要的事件,而不是afterrender.

于 2013-10-16T17:05:51.000 回答
0

作为一种解决方法,可以使用Ext.util.DelayedTask ,这里的工作示例: https ://fiddle.sencha.com/#fiddle/102

想法是在last-afterLayout上执行延迟任务

于 2013-10-15T06:20:25.713 回答