ExtJs 确定表单加载的可见性

Posted

技术标签:

【中文标题】ExtJs 确定表单加载的可见性【英文标题】:ExtJs determine visibility on form load 【发布时间】:2013-02-27 16:07:47 【问题描述】:

在 Extjs 3.4 中,我有一个相当大的表单,它是通过 someForm.getForm().load(url: someplace, etc) 的 ajax 调用填充的,它运行良好。不过,我似乎无法解决的问题是,有几个组合框和复选框可以确定另一个字段是否可见以及allowBlank

根据类似问题的答案,我尝试在表单上使用 actioncomplete 事件,但此时字段没有值。我也尝试过使用load() 调用的success 事件,但遇到了同样的问题。

还有其他方法可以从form.load() 调用中获取此功能吗?

编辑 - 这是我的load 电话:

var panel = Ext.getCmp('someFormID');
panel.getForm().load(
    method: 'GET',
    url: 'ajax_get_request.aspx?id=' + id,
    success: function (form) 
        // This will error: object is null or undefined
        alert(form.findField('fieldID').getValue());
    
);

我对 Extjs 比较陌生,所以也许我只是在这里遗漏了一些东西......

【问题讨论】:

它抱怨哪个对象? form 还是从findField('fieldID')返回? 在我看来,您使用的'fieldID' 可能不正确,因此未找到任何字段。 【参考方案1】:

不知道为什么挂钩到Ext.form.BasicForm.load()success 回调对您来说会失败,但我可以提出另一种方法。

我通常使用显式的Ext.Ajax.request() 调用将数据加载到Ext.data.Record。然后在request()success 回调中,我使用Ext.form.BasicForm.loadRecord() 将数据加载到表单中。如果您需要对加载的值采取行动,您可以在同一个回调中执行。

我这样做是因为我喜欢将来自服务器的原始值存储在一边。

【讨论】:

我认为成功回调将是执行此操作的地方,但也许我的代码(请参阅编辑)设置不正确?我之前没有使用过Ext.data.Record,所以我会调查一下。 好吧,我不知道为什么,但切换到使用字段名称而不是 ID 似乎可以正常工作。我真的不知道为什么,除非表单不喜欢在创建时将变量附加到 ID (id: 'somestring' + idVar,) 没错。表单和任何其他 ExtJS 组件都不喜欢这样。 ID 在创建组件时在多个地方使用,之后更改它不会传播此更改。一旦组件启动并运行,最好不要管ids。

以上是关于ExtJs 确定表单加载的可见性的主要内容,如果未能解决你的问题,请参考以下文章

访问子表单可见性

使表单在首次加载时不可见

根据组合框选择切换表单上其他字段的可见性 - MS Access

如何确定控件的可见性?

动态换出或切换控件的可见性

小部件可见性更改时在 MacOS 中呈现 Qt 错误表单