【问题标题】: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,在这种情况下,有人可以指导一下:

  1. add方法后是否需要在mainTabPanel上调用doLayout()
  2. 应该在mainTabPanel 或新添加的子面板上调用doLayout(),即Ext.getCmp('mainTabId').doLayout()Ext.getCmp('panelId').doLayout()
  3. 调用 doLayout() 是否会处理所有与渲染相关的问题,例如滚动条?
  4. 方法getPanel() 应该返回一个已经创建的面板(使用Ext.create)还是应该返回一个配置对象(使用xtype:'panel')?在牢记时间的情况下,应该首选哪一个以获得更好的性能?

【问题讨论】:

    标签: dynamic extjs panel extjs4.1


    【解决方案1】:

    AbstractContainer::add()

    <...> 如果 Container 配置了尺寸管理布局管理器,此时 Container 也会重新计算其内部布局。

    所以你不必这样做 13 因为:

    AbstractContainer::doLayout()

    <...> 在大多数情况下,框架在内部使用它来刷新布局。

    AbstractContainer::defaults

    为了使默认值起作用,必须使用 {xtype: ......} 添加子项,而不是使用 Ext.create("widget.type",{}) © roger.spall

    所以我更喜欢返回配置对象而不是组件本身。

    【讨论】:

    • 感谢 o_nix 的帖子。不幸的是,如果我们不调用 doLayout(),那么布局看起来会损坏,但是一旦调用 doLayout(),所有问题(如出现滚动条等)都会得到修复。我们在许多浏览器中对此进行了测试,发现在动态添加之后必须调用 doLayout()。
    猜你喜欢
    • 2020-01-27
    • 1970-01-01
    • 2018-06-05
    • 2013-10-18
    • 1970-01-01
    • 2015-09-06
    • 2020-02-16
    相关资源
    最近更新 更多