我有一个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异常。我尝试使用activate
和enable
事件而不是afterrender
,但即使API说FormPanel触发了这些事件,也不会调用警报('test')。
我无法找到任何方法让我的面板在加载我的面板时获取内部FormPanel的值。有没有人有任何想法?
答案 0 :(得分:3)
使用getFieldValues()代替getValues()将通过调用每个字段实例的getValue()方法而不是通过读取DOM来收集值。这应该允许您获取您的值,无论表单的呈现状态如何。
答案 1 :(得分:1)
我的一个项目遇到了同样的问题,我设法使用afterlayout
事件修复了它。
答案 2 :(得分:0)
我会设置.deferredRender:false尝试。
可能最好推出你的覆盖后更改,然后只使用一个直接的deferredRender:false配置项进行测试。
我认为问题是由于非活动标签在激活之前不会呈现的。在您的方案中,您无法获取值,因为它们在激活/显示选项卡之前不存在。
设置deferredRender:false将呈现所有选项卡中的项目。通过设置deferredRender可能会影响性能:false,因此必须进行测试。
希望这有帮助。