3

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

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

Uncaught TypeError: Cannot read property 'dom' of undefined

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

我试图监听事件。我试过了:

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

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

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

4

3 回答 3

3

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

于 2010-12-10T05:19:54.000 回答
1

我的一个项目也遇到了同样的问题,我设法使用该afterlayout事件解决了它。

于 2010-12-10T05:24:18.117 回答
0

我会尝试设置 .deferredRender:false 。

Ext.TabPanel.deferredRender

最好推出你的布局后更改,然后直接使用 deferredRender:false 配置项进行测试。

我相信这个问题是因为非活动选项卡在它们变为活动状态之前不会呈现。在您的场景中,您无法获取这些值,因为它们在选项卡被激活/显示之前不存在。

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

希望这可以帮助。

于 2010-12-11T19:01:59.557 回答