Javascript Extjs:强制组件重新渲染
我在ExtJs中有一个自定义组件,它是一个表单字段(GridField)。它将网格显示为表单字段,并按预期工作。观察结果如下:Javascript Extjs:强制组件重新渲染,javascript,extjs,extjs4,extjs4.2,Javascript,Extjs,Extjs4,Extjs4.2,我在ExtJs中有一个自定义组件,它是一个表单字段(GridField)。它将网格显示为表单字段,并按预期工作。观察结果如下: 当表单单独呈现时(例如,在窗口或卡片布局的第一个面板中,所有内容都显示得很好) 当窗体不是卡布局中的第一个面板或在第一次呈现时隐藏时,将显示字段名,并保留所需的空间,但不显示控件 我做了一些检查,发现定制组件实际上是呈现的,但是所有html元素(div等)的宽度都是0。它们都有样式(宽度:0)。我猜这是因为在渲染完成时表单面板不可见 就控件的实现而言,我正在扩展Ext.
Ext.form.field.Base
。在initComponent
中,我只需调用this.on('afterrender',this.initControl)
,即可在渲染后为附加控件运行自定义代码。在这里,输入
字段被隐藏,网格被渲染到它应该位于的位置
我的问题是
1.如何强制控件重新渲染,使宽度不再为0?
2.如果当前的实现是错误的,那么使用网格或其他ext组件作为表单字段的正确方法是什么?您是否尝试调用“doLayout”方法以确保重新正确应用维度?重新渲染在Extjs中并不常见,通常使用doLayout来实现。如果没有,则可能是您的实现本身出了问题。我想一定是我的实现出了问题,因为doLayout不适合我。我不知道这是否是因为我正在使用
renderTo
,并且我要渲染到的div的宽度是否为0。我支持使用doLayout
,但也许您需要使用deep=true
,如doLayout(true)
?您问题的答案如下: