Extjs:强制组件重新渲染

11

我有一个使用ExtJs编写的自定义组件,是一个表单字段(GridField)。它将网格作为表单字段显示,并正常工作。观察如下:

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

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

我检查了一些内容,发现自定义组件实际上已经渲染出来,但所有HTML元素(div等)的宽度都为0。它们都具有样式(width:0)。我猜测这是因为表单面板在渲染时没有可见性。

在控件的实现方面,我正在扩展 Ext.form.field.Base 。在 initComponent 中,我只是调用 this.on('afterrender', this.initControl)以在渲染后运行其他控制的自定义代码。在这里, input 字段会被隐藏,而网格会被渲染到其应在的位置。

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


你的问题答案在这里:https://dev59.com/YGsz5IYBdhLWcg3wxq4V#7665964 - Marco Sulla
1个回答

4

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


我猜这可能是我的实现有问题,因为doLayout对我不起作用。我不知道是否因为我正在使用“renderTo”,如果我要渲染的div的宽度为0,则不可见。 - ritcoder
我赞同使用 doLayout,但也许你需要以 deep=true 的方式运行它,例如 doLayout(true) - Steen

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接