我有一个带有组合框的表单。组合框通过 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);
在示例代码中向上移动一个语句)
编辑
需要考虑两点-
- 您确定组合商店在表单加载之前完成加载了吗?
查看 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/