2

Ext.Templateにバンドルされたパネルを作成しました。このパネルは、崩壊した人生を始める別のパネルに含まれています。

id:             'myPanel',
title:          'My Title',
layout:         'border',
collapsible:    true,
collapsed:      true,
hideCollapseTool:true,
bodyBorder:     false,
height:         300,
bodyStyle:      'background:#F9F9F9;',
items: [{
    id:         'myDisplayPanel',
    bodyStyle:  'background:transparent;',
    width:      300,
    border:     false,
    margins:    '5 5 5 5',
    region:     'west',
    tpl:        new Ext.Template([
                    'some template'
                ])
},
{
    id:         'myForm',
    xtype:      'form',
    bodyStyle:  'background:transparent;',
    border:     false,
    margins:    '5 5 5 5',
    region:     'center',
[...]

このテンプレートパネルは、隣接するグリッドで行が選択された結果として更新されることになっています。しかし、初めて.update(data);を呼び出すとエラーが発生します。myDisplayPanelには、body要素が含まれていないためです。

myGridSelectionModel: new Ext.grid.RowSelectionModel({
    singleselect: true,
    listeners: {
        rowselect: function(sm,rowIdx,r) {
            Ext.getCmp('myDisplayPanel').update(r.data);
            Ext.getCmp('myPanel').expand(true);
        }
    }
}),

myDisplayPanel.update()を呼び出すと、ExtがmyDisplayPanel.bodyを最初のパラメーターとしてtemplate.overwrite関数を呼び出そうとすると、エラーが発生します。

function(b,a,c){b=Ext.getDom(b);b.innerHTML=this.applyTemplate(a);

ビーイングが表示される前に、Extにこの非表示のパネルのボディ要素を生成させることはどういうわけか可能ですか?更新する前に要素を展開しようとしましたが、これで効果があります...

4

3 に答える 3

1

このスレッドは2か月前のものであることがわかっているので、解決策を見つけたかどうかはわかりません。しかし、私は同じことに遭遇し、答えを探しているときにあなたのスレッドに出くわしました。これは私がやったことです:

現在panel.update(content)を実行している場合は、次のことを試してください。

if(panel.rendered) panel.update(content);
else panel.contentToLoad = content;

実行するrenderイベントのリスナーを設定します。

if(this.contentToLoad) panel.update(this.contentToLoad);

そうすれば、パネルがレンダリングされていない場合、パネルはコンテンツをどこかに保存し、レンダリングリスナーはパネルがレンダリングされたときにそこにあるものをすべてロードします。

于 2010-10-11T16:55:39.517 に答える
0

Panelの構成を試してみてくださいelements。これは、ドキュメントから「パネルがレンダリングされるときに初期化するパネル要素のコンマ区切りのリスト」です。だから例えば、

elements: ['header','body']

ただし、デフォルトでは「body」のみになっているため、更新時にパネルが実際にレンダリングされていない可能性があります。呼び出しの順序を逆にして、コンテナーが最初に展開されるようにしてから(子パネルを強制的にレンダリングする必要があります)、それを更新してみてください。

于 2010-07-16T15:58:42.340 に答える
0

折りたたまれたパネル(および一般に非表示のコンテナ)は、デフォルトでは、最初に表示されるまで子をレイアウトしません。折りたたまれたコンテナでforceLayout:trueを設定することで、この動作をオーバーライドできます。名前が示すように、これにより、コンテナは表示されているかどうかに関係なく、そのレイアウトを実行するように強制されます。あなたの場合、これはmyDisplayPanelではなく、この構成を必要とするmyPanelであることに注意してください。

于 2010-08-15T18:59:36.503 に答える