在ExtJS中getForm()。load()加载组合字段值?

时间:2011-04-04 14:55:10

标签: javascript forms extjs combobox

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

当数据加载到表单中时,我可以通过Firebug看到它接收到正确的值,然后组合显示正确的相应显示值。当我在FireBug中查看hiddenField的HTML时,它表示值=“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);
});

COMSON的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}}

2 个答案:

答案 0 :(得分:1)

如果您的表单在加载之前加载,则可能会发生这种情况。 (鉴于其余代码看起来很好)

我怀疑如果您在加载表单之前渲染表单,这将解决 (在示例代码中移动frmClientRecordCmp.render(document.body);一条语句)

EDIT
要考虑两点 -

  1. 在表单加载之前,您确定组合商店是否已完成
  2. 查看ComboBox's valueField文档,看起来在加载表单后可能需要调用combo.setValue。一些东西 -

    frmClientRecordCmp.getForm()。负载({   url:'/referrals/index.php/clients/getbyid/100',   成功:功能(形式,动作){     form.findField( 'advisorName')的setValue(action.result.data.advisorId)。   } });

答案 1 :(得分:0)

这是我使用id:'advisorName'造成的问题。我正在返回一个名为'advisorName'的字段,因此即使我指定了hiddenName值,它也会填充它。道德是确保你的id是唯一的而不是字段名。