2012-06-22 103 views
1

我有一個infoContainer延伸ExtJS的4.0.7一個Ext.panel.Panel具有這些性能(唯一相關示出):如何在擴展之前等待ExtJS Panel渲染?

  • 可摺疊:真
  • 摺疊:真
  • 禁用:真
  • forceLayout:真

我對組件(如文本框,複選框等)進行了一些修改(某些渲染),所以我在面板的beforeexpand。但是,當面板展開時,我們清楚地看到面板可見後對組件的修改。所以,我需要這個邏輯完成之前我們看到面板打開。

那麼,我可以限制面板的擴展只發生在beforeexpand的邏輯完成時嗎?以及如何做到這一點?

+0

每次該面板擴展時,渲染邏輯是否需要不同?或者它只是在應用程序加載後一次? – Geronimo

+0

有一次,小組第一次擴大。 – elbaid

回答

3

這裏是我會怎麼做:

創建做這您當前要在beforeexpand事件發生在渲染/修改邏輯功能。

在這個函數中,在面板上設置一個自定義屬性,這樣你就會知道它是根據你的邏輯進行渲染/修改的。 myPanel.isPrepared = true;

此外,在這個函數的最後做另一個呼叫myPanel.expand();

然後,在beforeexpand處理程序把一個條件來檢查,如果你的渲染/修改已經完成例如,if (myPanel.isPrepared) {...

如果通過,然後不要在處理程序中做任何事情,並讓面板擴展。

如果是的話那麼通撥打上面提到的功能,然後return false;,將停止從擴大面板,你的函數會做你想要的需要渲染/修改,然後它會調用擴展當它全部完成。

假設你不與MVC模式創建的應用程序的處理程序和函數可以是這個樣子:

myPanel.on('beforeexpand`, function() { 
    if (!myPanel.isPrepared) { 
     prepareMyPanel(); 
     return false; 
    } 
}) 

function prepareMyPanel() { 
    // rendering/modification logic here... 
    myPanel.isPrepared = true; 
    myPanel.expand(); 
} 

如果要創建與MVC模式的應用程序,你應該可以說在翻譯到正確的控制器處理程序。

+0

我理解這個答案背後的邏輯,並且很好地解釋了這一點,嘗試了很多方法,但對我來說卻行不通。 – elbaid

+0

@elbaid你是否收到任何類型的錯誤信息? 「prepareMyPanel」函數是否被調用?你可以發佈你試過的代碼嗎? – Geronimo

+0

沒有錯誤消息,只是不工作,事件不會按照我的意願解僱。 – elbaid

相關問題