将孩子添加到父母后是不是必须调用 doLayout() 方法?
Posted
技术标签:
【中文标题】将孩子添加到父母后是不是必须调用 doLayout() 方法?【英文标题】:Is calling doLayout() method a must after adding child to a parent?将孩子添加到父母后是否必须调用 doLayout() 方法? 【发布时间】:2012-06-28 07:05:57 【问题描述】:在我们的应用程序中,有一个标签面板,我们在其中动态添加/删除面板。
通过菜单处理程序中的以下代码单击菜单项添加面板:
Ext.getCmp('mainTabPanelId').add(getPanel());
这里getPanel()
方法创建后返回面板。
假设主标签面板的id是mainTabPanelId
,子面板的id是panelId,在这种情况下,有人可以指导一下:
-
add方法后是否需要在
mainTabPanel
上调用doLayout()
?
应该在mainTabPane
l 或新添加的子面板上调用doLayout()
,即Ext.getCmp('mainTabId').doLayout()
或Ext.getCmp('panelId').doLayout()
?
调用 doLayout()
是否会处理所有与渲染相关的问题,例如滚动条?
方法getPanel()
应该返回一个已经创建的面板(使用Ext.create
)还是应该返回一个配置对象(使用xtype:'panel'
)?在牢记时间的情况下,应该首选哪一个以获得更好的性能?
【问题讨论】:
【参考方案1】:AbstractContainer::add()
<...> 如果 Container 配置了尺寸管理布局管理器,此时 Container 也会重新计算其内部布局。
所以你不必这样做 1 — 3 因为:
AbstractContainer::doLayout()
<...> 在大多数情况下,框架在内部使用它来刷新布局。
AbstractContainer::defaults
为了使默认值起作用,必须使用 xtype: ...... 添加子项,而不是使用 Ext.create("widget.type",) © roger.spall
所以我更喜欢返回配置对象而不是组件本身。
【讨论】:
感谢 o_nix 的帖子。不幸的是,如果我们不调用 doLayout(),那么布局看起来会损坏,但是一旦调用 doLayout(),所有问题(如出现滚动条等)都会得到修复。我们在许多浏览器中对此进行了测试,发现在动态添加之后必须调用 doLayout()。以上是关于将孩子添加到父母后是不是必须调用 doLayout() 方法?的主要内容,如果未能解决你的问题,请参考以下文章
收到错误“您必须首先在孩子的父母上调用removeView()”
指定的孩子已经有一个父母。您必须先在孩子的父母上调用 removeView()
指定的孩子已经有一个父母。您必须首先在孩子的父母上调用 removeView()。 (C#)