在初始化容器Panel时,无法在Ext Js FormPanel上调用getValues()

时间:2010-12-10 03:37:02

标签: forms extjs formpanel

我有一个Ext Js面板,我将添加到我的主TabPanel中。我添加的面板包含一个FormPanel作为其中一个项目,在FormPanel中我有一个名称字段。我想要做的是根据表单字段中的名称更改Tab的名称。

问题是如果我在面板的initComponent中调用FormPanel的getForm().getValues(),我会收到以下javascript错误:

Uncaught TypeError: Cannot read property 'dom' of undefined

如果我在initComponent之外执行此操作(例如按下按钮),一切正常。在做了一些测试后,我认为问题是FormPanel实际上还没有呈现(因此dom不存在),getValues()失败了。但是,我似乎无法找到一种方法来加载Panel中的FormPanel值。

我试着去听事件。我试过了:

this.detailForm.on('afterrender', function () { alert('test'); });

但这样做表明在实际呈现表单之前调用AfterRender(它在屏幕上不可见)。将警报更改为我的自定义函数处理程序会产生先前的dom异常。我尝试使用activateenable事件而不是afterrender,但即使API说FormPanel触发了这些事件,也不会调用警报('test')。

我无法找到任何方法让我的面板在加载我的面板时获取内部FormPanel的值。有没有人有任何想法?

3 个答案:

答案 0 :(得分:3)

使用getFieldValues()代替getValues()将通过调用每个字段实例的getValue()方法而不是通过读取DOM来收集值。这应该允许您获取您的值,无论表单的呈现状态如何。

答案 1 :(得分:1)

我的一个项目遇到了同样的问题,我设法使用afterlayout事件修复了它。

答案 2 :(得分:0)

我会设置.deferredRender:false尝试。

Ext.TabPanel.deferredRender

可能最好推出你的覆盖后更改,然后只使用一个直接的deferredRender:false配置项进行测试。

我认为问题是由于非活动标签在激活之前不会呈现的。在您的方案中,您无法获取值,因为它们在激活/显示选项卡之前不存在。

设置deferredRender:false将呈现所有选项卡中的项目。通过设置deferredRender可能会影响性能:false,因此必须进行测试。

希望这有帮助。