1

我创建了一个面板:

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

我存储oMainView到一个对象以稍后再次添加此面板!

然后我oMainView通过以下方式添加到我的 DOM add()

// 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'
            });

但是添加这个存储面板不起作用,也没有错误。Div 只是保持空白。

4

2 回答 2

1

这不是 ExtJS 组件应该如何工作/使用的方式。请注意,渲染和布局是组件创建的重要部分,在您的情况下每次都需要完成。如果您真的不想销毁它们,我建议您隐藏未使用的组件。您可以使用卡片布局轻松存档。

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

还要检查您是否有重复的 ID!

顺便说一句,使用renderTo: oWindowDivwithautoRender: true没有意义。在您的情况下,第二个配置没有任何作用,因为您已经有一个渲染目标,容器被渲染到该目标中。

于 2012-11-09T14:48:46.327 回答
0

几天后终于解决了:

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

于 2012-11-12T16:53:14.823 回答