javascript - 在 ExtJS 中,getForm().load() 加载组合字段值吗?

标签 javascript forms extjs combobox

我有一个带有组合框的表单。组合框通过 Json 存储加载它的数据,我使用 form.getForm().load( url: 'URL') 也从 Json 存储加载表单数据。

当数据加载到表单中时,我可以通过 Firebug 看到它收到了正确的值,然后组合显示正确的相应显示值。当我在 FireBug 中查看 hiddenField 的 HTML 时,它说的是 value="DISPLAYVALUE"而不是 value="VALUE"。然后,当我从组合中选择任何值时,它会更改为正确的值 ="VALUE"。

当然,如果用户从不更改组合,则会提交错误的值。这是设计/限制还是我遗漏了什么。

我真的需要在执行 getForm().load() 之前加载和验证每个组合的数据吗? load() 仅加载完整数据是否有意义,即使这意味着从商店加载数据?

我提供了存在问题的简化示例代码。

    Ext.onReady(function(){

    var frmClientRecord = {
        xtype: 'form',
        items: [
            {
                fieldLabel: 'Advisor',
                xtype: 'combo',
                id: 'advisorName',
                displayField: 'Advisor',
                valueField: 'advisorId',
                hiddenName: 'advisorsId',
                mode: 'remote',
                store: new Ext.data.Store({
                    autoLoad: true,
                    proxy: new Ext.data.HttpProxy({
                        url: '/referrals/index.php/advisors/read',
                        method: 'POST'
                        }),
                    reader: new Ext.data.JsonReader({
                        root: 'results',
                        fields: [
                            {name: 'advisorId'},
                            {name: 'Advisor'}
                        ]
                    })
                })
            }
        ]
    }

    frmClientRecordCmp = new Ext.FormPanel(Ext.apply(frmClientRecord));


    frmClientRecordCmp.getForm().load({
        url: '/referrals/index.php/clients/getbyid/100',
    })

    frmClientRecordCmp.render(document.body);
});

组合的 JSON

({"results":[{"Advisor":"Chris","advisorId":33},{"Advisor":"Fawzia","advisorId":2},{"Advisor":"Kent","advisorId":3},{"Advisor":"Rob","advisorId":4},{"Advisor":"Stephanie","advisorId":5}]})

表单的 JSON

{success: true, data: {"advisorsId":33}}

最佳答案

如果您的表单加载之前组合商店加载,则可能会发生这种情况。 (鉴于您的其余代码看起来不错)

我怀疑如果您在加载表单之前先渲染表单,这个问题就会解决。
(将 frmClientRecordCmp.render(document.body); 在示例代码中向上移动一个语句)

编辑
需要考虑两点-

  1. 确定组合商店在表单加载之前完成加载了吗?
  2. 查看 ComboBox's valueField文档,看起来在加载表单后可能需要调用 combo.setValue。类似于-

    frmClientRecordCmp.getForm().load({ 网址:'/referrals/index.php/clients/getbyid/100', 成功:功能(形式,行动){ form.findField('advisorName').setValue(action.result.data.advisorId); } });

关于javascript - 在 ExtJS 中,getForm().load() 加载组合字段值吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5540295/

相关文章:

javascript - 如何从 ExtJS 控件引用祖先容器对象?

javascript - Bootstrap 模式不显示

storage - Sencha 多店一店实例

javascript - javascript 在模糊表单验证方面遇到问题

php - 使用 PHP 和 MySQL 开发 'Quiz' Web 应用程序的数据库设计

html - 如何在没有javascript的情况下通过提交输入传递参数?

javascript - 从 HTML 表单发布 JS 变量

javascript - ExtJS 3.3.0 在不知道 ID 的情况下禁用按钮

javascript - 连接列表的可排序滚动问题

javascript - AngularJS html 5 模式