0

我使用卡片布局在两个创建的面板之间切换:

var config = {
layout: 'card',
region : 'center',
activeItem: 0,
defaults : {
//height : 160
},
items : [this.ePanel, this.dPanel]
};
Ext.apply(this, config);

切换基于以下标准进行:

if(params.exchange==='ABCD'){
l.setActiveItem(this.ePanel.id);
} else {    
l.setActiveItem(this.dPanel.id);
}

当我在面板之间切换时,其中一个面板内容会失真。有没有解决问题的办法?我正在使用 ExtJS 2.2。

4

1 回答 1

1

我从未使用过 Ext2,但我在使用 Ext3 时遇到过类似的困难。这里有两个想法你可以试试……

  • 设置deferredRendertrue

  • 调用doLayoutafter setActiveItem,可能在一小段延迟之后(因为渲染通常在 Ext 中延迟):

    l.setActiveItem(this.ePanel.id);
    setTimeout(function() {
        l.doLayout();
    }, 100); // more may be needed, one need to inspect Ext's code to know the precise value
    

    doLayout通常是布局问题的解决方案,但它通常也需要大量调试才能应用。实际上,布局被缓存了(至少在 Ext3 中),所以如果 Ext 内部认为没有任何改变,你的调用可以被忽略。此外,正如我已经说过的,渲染通常是延迟的,所以如果你没有足够的延迟它,你的doLayout调用可能会在子元素被渲染之前执行......

于 2013-06-10T10:03:33.440 回答