Javascript ExtJS 3:使用多个同名项加载表单

Javascript ExtJS 3:使用多个同名项加载表单,javascript,forms,extjs,Javascript,Forms,Extjs,我有一个ExtJS表单,它包含几个同名的项。我希望当表单加载来自服务器端的值时,所有这些同名组件都将被分配相同的相关值 显然,发生的情况是,只有同名组中的第一个元素获得该值,其他元素则被跳过 有没有一种简单的方法可以改变这种观察到的行为 更新 以下是表格的代码: var productionRunAdvancedParametersForm = new Ext.form.FormPanel({ region : 'center', name : 'productionRunAdv

我有一个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数组中交换它们,那么复选框将被选中,但隐藏项不会得到任何值。

您看到的行为正是我所期望的

在表单中,多次使用同一字段名(除非您将其用于单选按钮,情况并非如此)是一个错误。试想一下表单提交函数在这种情况下应该做什么:是否应该发送相同的键(输入名称)两次,可能是不同的值

(显然,对于radiobuttons,答案很简单:将输入名称作为键发送,将选中的radiobutton的值作为值发送)

Ext在这里做的是,扫描表单搜索与名称匹配的输入字段,然后将值分配给第一个匹配的输入(因为它假定没有重复的名称)

您只需通过以下方式解决此问题:

  • 在表格中使用两个不同的名称(例如
    genScens
    genScens\u chk
  • 在服务器端响应的两个不同键下发送相同的值,例如

    {“数据”:{“genScens”:true,“genScens_chk”:true},“success”:true}

  • 请注意:如果无法更改服务器响应,仍然使用两个不同的名称,只需向
    success
    函数添加回调,相应地设置
    genScens\u 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);
     }
    },
    

    您能给我们看一些代码吗?出于某种原因,我希望在我的例子中的行为是:-加载时将值分配给所有相关元素(而不仅仅是第一个元素)。-提交时,发送给定名称的值数组。在我的情况下,它将完美地工作,因为禁用的复选框不会被提交,因此我将只有隐藏提交的值。我同意,在您的情况下,提交将工作,但只是因为禁用的输入不会被提交:)我从这里开始提交一组值的想法:Paolo,您是否有链接,这也许可以解释为什么表单加载和多个名为的元素的工作方式完全相同?它是根据HTML规范还是特定于ExtJS?