我将大型应用从v2升级到v3.4
我的手风琴有n> 1个面板。默认情况下,第一个扩展而其他所有扩展。与现在使用Ext 3.4的Ext JS 2相反,面板在首先展开之前不会被渲染。这会导致多个问题,因为某些代码路径要求元素已经在DOM内部。
deferredRender
对手风琴没有任何影响,它仅适用于标签。
我尝试了什么:迭代所有项目并调用setActiveItem
或setActive
但这只会导致最后一个面板实际呈现,所有其他面板仍然不在DOM内部(我想激活一个即使animate
为false
),元素也是异步的。
我怎么能告诉手风琴渲染所有面板,即使它们最初都会崩溃?
答案 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);
});
});