0

大きなアプリをv2からv3.4にアップグレードしました

n>1パネルのアコーディオンがあります。デフォルトでは、最初のものは拡張され、他のすべては拡張されません。Ext3.4を搭載したExtJS2とは対照的に、パネルは最初に展開されるまでレンダリングされません。一部のコードパスでは要素がすでにDOM内にある必要があるため、これにより複数の問題が発生します。

deferredRenderアコーディオンには何の影響もありません。タブ用です。

私が試したこと:すべてのアイテムを繰り返して呼び出すsetActiveItemsetActive、これは最後のパネルを実際にレンダリングするだけで、他のすべてはまだDOM内にありません(要素のアクティブ化は非同期ですが、非同期であると思いますanimatefalse

最初は折りたたまれていても、すべてのパネルをレンダリングするようにアコーディオンに指示するにはどうすればよいですか?

4

1 に答える 1

2

私の知る限り、レイアウト付きのパネル内のすべてのコンポーネントはaccordionすぐにレンダリングされます。例: http://jsfiddle.net/P5Gen/3/

afterrenderコンテナでイベントが発生した後、子コンポーネントがレンダリングされることに注意してください。子の実際のレンダリングはレイアウトによって行われるため、afterlayoutイベントが発生した後にマークアップを使用できます。

レイアウトを強制する (また、子にレンダリングを強制する) には、 を呼び出すことができますcontainer.doLayout(false, true)

doLayoutアコーディオン レイアウトの各コンテナーで呼び出す必要がある場合は、 を使用ComponentMgrして実行できます。例:

Ext.ComponentMgr.all.on('add', function(index, component){
    if (!(component instanceof Ext.Container)) {
        return;
    }
    if (component.layout !== 'accordion' && !(component.layout instanceof Ext.layout.AccordionLayout)) {
        return;
    }

    component.on('afterrender', function(sender) {
        // do layout or something else
        sender.doLayout(false, true);
    });
});
于 2012-12-14T11:05:15.227 に答える