2013-11-27 19 views
1

我有一个包含有相同名称的几个项目的ExtJS的形式。我期望当表单加载来自服务器端的值时,所有这些同名命名的组件将被赋予相同的相关值。ExtJS的3:形式负载几个项目具有相同名称的

显然,什么情况是,只从组同样命名的第一个元素得到值,其他被跳过。

是否有一个简单的方法来改变这种观察到的行为?

UPDATE

下面是形式的代码:

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} 

什么情况是只隐藏的组件获得值 '真' ,禁用复选框不会被检查。如果我在项目数组中交换它们,那么复选框会被选中,但隐藏的项目没有任何值。

+0

能否请您告诉我们一些代码? –

回答

1

您所看到的行为正是我所期待的。

在表单中,多次使用相同的字段名称 - 无论您是否将其用于单选按钮,情况并非如此 - 是错误。在这种情况下,想想表单提交函数应该做什么:它是否应该发送两次相同的密钥(输入名称),可能使用不同的值? (显然,在单选按钮的情况下,答案很简单:将输入名称作为关键字,并将选中单选按钮的值作为值)。

什么内线在这里所做的是,扫描形式seaching匹配的名称输入字段,然后分配值第一个匹配的输入(因为它不承担任何重复的名字)。形式使用两个不同的名字

  1. (如:genScensgenScens_chk
  2. 下两个不同的密钥发送相同的值在服务器端的响应:

    您可以通过简单地解决它周围,例如

    {"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); 
} 
}, 
+0

出于某种原因,我希望我的情况下的行为是: - 在负载时将值分配给所有相关元素(不仅仅是第一个)。 - 在提交时发送给定名称的值数组。在我的情况下,它会完美的工作,因为禁用复选框不会被提交,因此我只会隐藏提交的值。 – preeze

+0

我同意,在你的情况下提交将工作,但只是因为禁用的输入不会被提交:) –

+0

我从这里提出了一个值的数组提交的想法:http://stackoverflow.com/questions/4727974 /如何后提交一个输入复选框,这是禁用/ 4728029#4728029 保罗,你有链接也许这解释了为什么表单加载与多个元素的名称工作完全是这样的?它是根据HTML规范还是ExtJS具体? – preeze

相关问题