2013-11-27 18 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

相關問題