0

我将一个大型应用程序从 v2 升级到 v3.4

我有一个带有 n > 1 面板的手风琴。默认情况下,第一个是展开的,而所有其他的都不是。与现在使用 Ext 3.4 的 Ext JS 2 不同,面板在首先展开之前不会呈现。这会导致多个问题,因为某些代码路径要求元素已经在 DOM 中。

deferredRender对手风琴没有任何影响,它只是用于标签。

我尝试了什么:遍历所有项目并调用setActiveItemorsetActive但这只会导致最后一个面板被实际呈现,所有其他面板仍然不在 DOM 内(我想激活一个元素是异步的,即使animatefalse)。

我怎么能告诉手风琴渲染所有面板,即使它们一开始是折叠的?

4

1 回答 1

2

AFAIK 面板中带有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 回答