我将一个大型应用程序从v2升级到v3.4
我有一个有n>1个面板的手风琴。默认情况下,第一个是展开的,所有其他的都不是。与ExtJS2现在的Ext3.4不同,面板直到它们首先被展开才会被呈现。这会导致多个问题,因为有些代码路径要求元素已经在DOM中。
deferredRender对手风琴没有任何影响,它只是用于制表符。
我尝试的方法:迭代所有项并调用setActiveItem或setActive,但这只会导致实际呈现最后一个面板,所有其他面板仍然不在DOM中(我认为激活元素是异步的,即使animate为false)。
我如何告诉手风琴渲染所有面板,即使它们一开始是折叠的?
发布于 2012-12-14 19:05:15
使用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);
});
});https://stackoverflow.com/questions/13863463
复制相似问题