2016-03-01 57 views
0

我在代碼中添加了一個監聽器,如:約ExtJS的afterLayout

listen: { 
    afterLayout: function(){ 
     doSomething... 
    } 
} 

的功能是呈現HTML標籤。但是當頁面加載時它不起作用。我需要強制渲染頁面,比如改變瀏覽器的大小才能工作。我想知道爲什麼。 「afterLayout」應該在頁面加載正確後自動工作?或者我錯過了什麼?

+0

版本的ExtJS的? –

+0

@ Mr.George 4.1.x我忘了確切的版本,因爲代碼是公司的。 – nasuf

回答

0

我覺得你的事件搜索AfterRender階段。 僅當窗口大小發生變化而不是負載時纔會觸發Afterlayout。 afterrender事件匹配後加載感興趣的組件的佈局。 所以你應該試試這個:

listen: { 
    afterrender: function(){ 
     doSomething... 
    } 
} 

如果必須調用同一個函數在所有情況下調用它AfterRender階段和afterlayout

+0

感謝您的回答。我試圖像你說的那樣使用afterrender,但它沒有奏效。我不知道爲什麼所以我試圖在Layout之後嘗試。有沒有任何先決條件,使其工作?再次感謝。 – nasuf

+0

嘗試重現上煎茶撥弄你的問題,所以我可以嘗試直接解決問題 –

+0

AfterRender階段被稱爲子組件的渲染髮生之前!也許你正在尋找'boxready'事件,一旦所有的子組件被渲染,這個事件就會被調用。 – Alexander

0

我認爲你的問題可以解決viewport。 將您的應用程序包裝在此組件中。視口會聽窗口大小的變化,並自動重新大小它的子元素(應用程序)

1

您使用的是錯誤的配置。取而代之的listen: {使用listeners: {

下面是一個例子:https://fiddle.sencha.com/#fiddle/16gu

Ext.application({ 
    name : 'afterRender Test', 

    launch : function() { 
     Ext.create('Ext.container.Container', { 
      renderTo: Ext.getBody(), 
      listeners: { 
       afterRender: function() { 
        this.update('<div style="width:300px; background-color:red; padding:10px;">Added via afterRender listener</div>'); 
       } 
      } 
     }); 
    } 
}); 
+0

感謝您的提醒。其實它是我的代碼中的聽衆。我在這裏犯了一個錯誤。 – nasuf