IEでパネルが正常に表示されない
と書く
コンポーネントがadd(Ext.Component/object component):Ext.Componentを呼び出すと
コンポーネントにComponentを追加する場合は、doLayout()メソッドを呼び出してレイアウトを更新しなければ、追加したコンポーネントが見えません.
problems:
Extのシステム開発では、cardレイアウトでMpanelを実現し、panelにitems:panel、panelを追加し続け、サブpanelにitems:Formpanelを追加し続け、Formpanelにitems:field、field...を追加しました.(以上のサブアセンブリはすべてMpanelを作成する時に加入したもので、動的ロードではない).setActiveItem()を採用して異なるpanel間の切り替えを実現し、IEでpanelを切り替えた場合、FormPanelが正常に表示されない.FireFoxに正常に表示されます.
分析:
IEでsetActiveItem()の後にdoLayout()を呼び出す必要があり、FormPanelが正常に表示されます.
setActiveItem : function(item){
item = this.container.getComponent(item);
if(this.activeItem != item){
if(this.activeItem){
this.activeItem.hide();
}
this.activeItem = item;
item.show();
this.layout();
}
},
setActiveItem()は、this.layout()に注意し、現在のコンポーネントのlインタフェースの再レイアウトのみが設定されています.
doLayout : function(shallow){
if(this.rendered && this.layout){
this.layout.layout();
}
if(shallow !== false && this.items){
var cs = this.items.items;
for(var i = 0, len = cs.length; i < len; i++) {
var c = cs[i];
if(c.doLayout){
c.doLayout();
}
}
}
}
doLayout()は、現在のコンポーネントおよびコンポーネントの各サブコンポーネントを再レイアウトします.
cardレイアウトのサブパネルには、いくつかのレイヤのitemsが含まれているため、これらのコンポーネントはレンダリングできません.
firefoxでなぜ表示されるのか、I don't know.