2013-10-11 40 views
1

我被分配創建一個可用於桌面瀏覽器和移動瀏覽器的extjs4應用程序。我知道extjs4並非真正適用於手機(絕對適用於手機,但性能差異很大),但我們也支持我們的移動網站臨時用法(未來計劃:我們將創建一個Sencha Touch 2版本)。extjs4檢查窗口的最後一個子組件afterlayout事件

總之,我目前正在研究提高應用程序的響應能力。按鈕點擊,打開窗口等方面的響應能力。我想在打開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事件已被多次調用。所以,我檢查了api documentation of Sencha ExtJS 4.2 about afterlayout event of Ext.Window。它說:

當此容器中的組件由關聯的佈局管理器排列時觸發。

那麼,如何檢查我的窗口/彈出窗口的最後一個afterlayout事件?我需要這個,所以如果我確定了這個,我可以在這裏調用我的close splash函數。

請幫忙。提前致謝。

回答

1

你試過afterRender? 根據文件afterRender組件完成渲染後觸發..

+1

是的,我有'afterlayder'在'afterlayout'之前被調用,這就是爲什麼我試圖抓住'afterlayout'而不是'afterrender'。 –

+0

@JNERC是對的。我一直在試驗這個,並且觀察到,當'afterrender'被調用時,並不是所有的組件都被放置在窗口上。 – wens

1

在窗口的情況下,你應該罰款通過使用show事件,一旦窗口準備好並獲得顯示就會被觸發。請注意以下幾點鏈:

實例化 - >渲染 - >佈局 - >顯示

這是適用於所有組件!

  • 顯示總是觸發一次(但不是所有組件都將觸發該事件肯定是由於性能原因)
  • 佈局每次佈局需要更正的東西事件被解僱。但最初(通常)只有一次。如果這種情況發生的次數不止一次,那麼在創建時或在用戶交互之後,子級最有可能觸發父級的佈局。
  • 渲染總是被觸發一次,直到明確觸發rerendering但不經常發生。

所以要顯示什麼,直到窗口準備好我要麼適用正確調用者創建窗口之前,在窗口initComponent方法,或者如果你需要這個更多的時候你也可以用插件做。所有這三個選項都可以創建show listener(您應該管理偵聽器或將其應用於{single:true}),這樣可以再次刪除更多的閃屏。

0

這聽起來像boxready執行延遲任務是你需要的情況下,不afterrender