2012-11-09 64 views
1

我創建了一個面板:從DOM中移除後再次添加主機無法

oMainView = Ext.create('My.panel.view'); 

我存儲oMainView一個對象稍後再添加此面板!

然後我通過add()添加oMainView到我的DOM:

// Div to put it in 
var oWindowDiv = Ext.get(strStartDiv); 
// Container to hold it 
var oContainer = Ext.create('Ext.container.Container', { 
     id  : 'findMe', 
     layout : 'fit', 
     renderTo : oWindowDiv, 
     autoRender: true 
     }); 
oContainer.add(oMainView); 

後來那麼,我們的框架刪除最小化所有這些div。沒有頁面刷新。所以最大化我想以相同的方式添加我已經存儲的oMainView

這在FF和Chrome中完美運行。但Internet Explorer(7,8,9)無法渲染面板。它只呈現空的HTML元素。

什麼問題?

PS。我不想重新創建面板!只需再次添加到容器。


編輯:問題必須與創建的面板對象。因爲增加一個新的測試面板的工作原理:

oTest = Ext.create('Ext.panel.Panel', { 
       title: 'Test', 
       html: 'Text' 
      }); 

但添加此存儲面板不起作用,也沒有錯誤。該部門只是空着。

回答

0

幾天現在終於解決後:

權前的分機容器會從DOM刪除,我需要打電話.removeAll(false);

+0

請問您如何實現代碼「在Ext容器從DOM中刪除之前,我需要調用.removeAll(false);」 ?我在使用IE8時遇到了與EXTJS 4.1相同的問題。 感謝您的幫助。編輯 - 順便說一句,抱歉張貼在這裏,但我沒有足夠的代表進行評論:( – Pat

+0

我從框架中捕獲事件,然後在這個'Ext.container.Container'我調用'myContainer.removeAll假);'你需要找到你的容器被移除的地方。 – Patrick

1

這不是ExtJS組件應該如何工作/使用的方式。並注意,渲染&佈局是組件創建的重要組成部分,每次都需要在您的情況下完成。如果你真的不想銷燬他們,我會建議隱藏未使用的組件。您可以使用卡片佈局對此進行歸檔。

但回到你的問題;該組件將存儲私有參數,該參數指示它是否已被渲染,有時可能會導致問題。您還應該使用從autoDestroy: false設置的所有者容器中調用的remove()從DOM中刪除子組件(希望重置其內部參數)。

請檢查您是否沒有重複的ID!

順便使用renderTo: oWindowDiv以及autoRender: true doens沒有意義。在你的情況下,第二個配置什麼都不做,因爲你已經有一個渲染目標,容器被渲染。

+0

謝謝。我不能隱藏也不能刪除任何東西,因爲Extjs在另一個JS框架中使用,它會在最小化的情況下刪除所有的ExtJs DOM元素,但是我的Extjs對象仍然存在。我被迫重新添加它。重新創建它不會有最大化的效果。既然它在FF和Chrome中工作,爲什麼不是IE?我將檢查內部參數和ID。 – Patrick

+0

沒有修復它。我還能嘗試什麼? – Patrick

+0

@Idianer我想你不能做太多事情。你仍然可以嘗試自己調用doLayout(),但我懷疑這會解決你的問題。你將不得不調試添加過程,看看哪裏出了問題。 – sra

相關問題