Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/472.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Extjs:强制组件重新渲染_Javascript_Extjs_Extjs4_Extjs4.2 - Fatal编程技术网

Javascript Extjs:强制组件重新渲染

Javascript Extjs:强制组件重新渲染,javascript,extjs,extjs4,extjs4.2,Javascript,Extjs,Extjs4,Extjs4.2,我在ExtJs中有一个自定义组件,它是一个表单字段(GridField)。它将网格显示为表单字段,并按预期工作。观察结果如下: 当表单单独呈现时(例如,在窗口或卡片布局的第一个面板中,所有内容都显示得很好) 当窗体不是卡布局中的第一个面板或在第一次呈现时隐藏时,将显示字段名,并保留所需的空间,但不显示控件 我做了一些检查,发现定制组件实际上是呈现的,但是所有html元素(div等)的宽度都是0。它们都有样式(宽度:0)。我猜这是因为在渲染完成时表单面板不可见 就控件的实现而言,我正在扩展Ext.

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

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

  • 当窗体不是卡布局中的第一个面板或在第一次呈现时隐藏时,将显示字段名,并保留所需的空间,但不显示控件

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

    就控件的实现而言,我正在扩展
    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)
    ?您问题的答案如下: