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: oWindowDiv一緒に使用autoRender: trueするのは意味がありません。あなたの場合、2番目の設定では何も起こらず、コンテナがレンダリングされるレンダリングターゲットがすでに存在します。

于 2012-11-09T14:48:46.327 に答える
0

数日後、ついに解決策:

ExtコンテナがDOMから削除される直前に、を呼び出す必要がありました.removeAll(false);

于 2012-11-12T16:53:14.823 に答える