Ext JS 3.4懒惰渲染手风琴 - 强制渲染面板

时间:2012-12-13 15:51:17

标签: javascript extjs extjs3

我将大型应用从v2升级到v3.4

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

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

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

我怎么能告诉手风琴渲染所有面板,即使它们最初都会崩溃?

1 个答案:

答案 0 :(得分:1)

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);
    });
});