我有一个ExtJS表单,其中包含几个具有相同名称的项目。我希望当表单加载来自服务器端的值时,所有这些同名的组件将被赋予相同的相关值。
显然,发生的事情是,只有同名的组中的第一个元素才会获得该值,而其他元素则被跳过。
是否有一种简单的方法来改变这种观察到的行为?
更新
以下是表格的代码:
var productionRunAdvancedParametersForm = new Ext.form.FormPanel({
region : 'center',
name : 'productionRunAdvancedParametersCommand',
border : false,
autoScroll : true,
buttonAlign : 'left',
defaults : {
msgTarget : 'side'
},
layoutConfig : {
trackLabels : true
},
labelWidth : 200,
items : [
{
xtype : 'fieldset',
title : 'ASE',
collapsible : true,
autoHeight : true,
items : [ {
xtype : 'hidden',
name : 'genScens'
}, {
xtype : 'checkbox',
name : 'genScens',
fieldLabel : 'GEN_SCENS',
disabled : true
}]
}]
,
listeners : {
beforerender : function(formPanel) {
formPanel.getForm().load({
url : BASE_URL + 'get-data-from-server.json',
method : 'GET',
success : function(form, action) {
var responseData = Ext.util.JSON.decode(action.response.responseText);
if (!responseData.success) {
Screen.errorMessage('Error', responseData.errorMessage);
}
},
failure : function(form, action) {
Ext.Msg.alert("Error", Ext.util.JSON.decode(action.response.responseText).errorMessage);
}
});
}
}
});
服务器响应是:
{"data":{"genScens":true},"success":true}
只有隐藏的组件获得值'true'才会发生,禁用的复选框不会被检查。如果我在items数组中交换它们,则选中复选框但隐藏不会获得任何值。
答案 0 :(得分:2)
你看到的行为正是我所期待的。
在表单中,多次使用相同的字段名称 - 无论您将其用于单选按钮,情况并非如此 - 错误。想想在这种情况下表单提交功能应该做什么:它应该发送两次相同的密钥(输入名称),可能有不同的值吗?
(显然,对于radiobuttons,答案很简单:将输入名称作为键发送,选中单选按钮的值作为值)。
这里的Ext是什么,扫描表单搜索与名称匹配的输入字段,然后将值分配给第一个匹配的输入(因为它假定没有重复的名称)。
您可以通过以下方式解决问题:
genScens
和genScens_chk
)在服务器端响应中的两个不同密钥下发送相同的值,例如
{"data":{"genScens":true,"genScens_chk":true},"success":true}
请注意:如果您无法更改服务器响应,仍然使用两个不同的名称,只需向success
函数添加回调,相应地设置genScens_chk
值,那样:
success : function(form, action) {
var responseData = Ext.util.JSON.decode(action.response.responseText);
if (!responseData.success) {
Screen.errorMessage('Error', responseData.errorMessage);
}
else{
formPanel.getForm().findField("genScens_chk").
setValue(responseData.data.genScens);
}
},