【问题标题】:Extjs: Force a component to re-renderExtjs:强制组件重新渲染
【发布时间】:2014-04-20 18:21:47
【问题描述】:

我在 ExtJs 中有一个自定义组件,它是一个表单域 (GridField)。它将网格显示为表单字段并按预期工作。观察结果如下:

  1. 当表单单独呈现时(例如,在窗口或卡片布局的第一个面板中,一切都显示得很好)

  2. 当表单不是卡片布局中的第一个面板或在第一次呈现时隐藏时,会显示字段名称并留下所需的空间,但不会显示控件。

我做了一些检查,发现自定义组件实际上已呈现,但所有 html 元素(div 等)的宽度均为 0。它们都具有样式(宽度:0)。我的猜测是,这是因为在渲染完成时表单面板不可见。

在控件的实现方面,我扩展了Ext.form.field.Base。在initComponent 中,我只需调用this.on('afterrender', this.initControl) 即可在渲染后运行自定义代码以获取附加控件。这里input 字段被隐藏,并且网格被渲染到它应该在的位置。

我的问题是 1.如何强制控件重新渲染,使宽度不再为0? 2.如果当前的实现是错误的,那么使用grid或其他ext组件作为表单域的正确方法是什么?

【问题讨论】:

标签: javascript extjs extjs4 extjs4.2


【解决方案1】:

您是否尝试调用“doLayout”方法来确保正确重新应用尺寸?重新渲染在 Extjs 中并不常见,通常 doLayout 可以解决问题。如果没有,您的实现本身可能有问题。

【讨论】:

  • 我想这一定与我的实现有关,因为 doLayout 对我不起作用。我不知道是不是因为我使用的是renderTo,如果我渲染到的div的宽度是0是不可见的。
  • 我会支持使用doLayout,但也许您需要使用deep=true 运行它,如doLayout(true)
猜你喜欢
  • 1970-01-01
  • 2017-05-08
  • 2018-12-23
  • 2019-11-12
  • 2018-08-20
  • 2016-12-31
  • 2014-07-27
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多