我有一个带有组合框的表单。组合框通过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}}
答案 0 :(得分:1)
如果您的表单在加载之前加载,则可能会发生这种情况。 (鉴于其余代码看起来很好)
我怀疑如果您在加载表单之前渲染表单,这将解决
(在示例代码中移动frmClientRecordCmp.render(document.body);
一条语句)
EDIT
要考虑两点 -
查看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是唯一的而不是字段名。