从DOM中删除面板后再次添加面板失败

时间:2012-11-09 13:46:17

标签: internet-explorer extjs panel render extjs4.1

我创建了一个面板:

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

我将oMainView存储到对象中,以便稍后再次添加此面板!

然后我通过oMainView将<{1}}添加到我的DOM:

add()

之后,我们的框架会在最小化时删除所有这些Div。没有页面刷新。因此,在最大化时,我想以相同的方式添加// 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); ,我已经存储了它。

这在FF和Chrome中完美运行。但Internet Explorer(7,8,9)无法呈现面板。它只呈现空的HTML元素。

有什么问题?

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


编辑:问题必须与创建的面板对象有关。因为添加新的测试面板有效:

oMainView

但添加此存储的面板不起作用,也没有错误。 Div只是空着。

2 个答案:

答案 0 :(得分:1)

这不是ExtJS组件应该如何工作/使用的方式。并注意到渲染&amp;布局是组件创建的重要组成部分,需要在每种情况下完成。我建议隐藏未使用的组件,如果你真的不想破坏它们。您可以使用卡片布局轻松存档。

但回到你的问题;该组件将存储私有参数,表明它是否已经被渲染,有时可能会导致问题。您还应该使用remove()从拥有者容器调用autoDestroy: false设置,从DOM中删除子组件(希望重置它的内部参数)。

还要检查您没有重复的ID!

顺便使用renderTo: oWindowDivautoRender: true这样做没有意义。在你的情况下,第二个配置什么都不做,因为你已经有一个渲染目标,容器被渲染到其中。

答案 1 :(得分:0)

经过几天的努力终于解决了问题:

在Ext容器从DOM中删除之前,我需要调用.removeAll(false);