2012-11-09 101 views
1

我正在研究一個需要輸入數據行(讀取:對象數組)的Backbone應用程序。多維表單數組到JavaScript對象

我有形式列明像這樣:

<tr> 
    <td><input type="text" name="items[][qty]"></td> 
    <td><input type="text" name="items[][job_number]"></td> 
    <td><input type="text" name="items[][description]"></td> 
    <td><input type="text" name="items[][purchase_order]"></td> 
</tr> 
[...] 

與行的動態數。

我希望能夠在形式檢索數據:

{ 
    items: [ 
     { 
      qty: [val], 
      job_number: [val], 
      description: [val], 
      purchase_order: [val] 
     }, 
     [...] 
    ] 
} 

我已經找到的最接近的解決方案是通過Aaron Shafovaloff,但它不支持輸出(僅對象)的數組。我可以修改他的代碼來完成我所需要的功能,但是我想我會先在這裏問一下,因爲沒有意義重新發明輪子。

我在我的項目中使用jQuery和Underscore,因此有權訪問他們的方法。

回答

1

我有我的這種方式來獲得的文本框多行:

aItems = new Array(); 
    $("table tbody tr").each(function(){ 
     var $this = $(this); 

     aItems.push({ 
      qty:$this.find('input[name="qty"]').val(), 
      job_number: $this.find('input[name="job_number"]').val(), 
      description:$this.find('input[name="description"]').val(), 
      purchase_order:$this.find('input[name="purchase_order"]').val() 
     }); 

    }); 

這個怎麼樣:

aItems = new Array(); 
    $("table tbody tr").each(function(){ 
     var items = {}; 

     $(this).find('input').each(function(){ 
      items[$(this).attr('name')] = $(this).val(); 
     } 
     aItems.push(items); 

    }); 
+0

這是一個很好的解決這個確切的情況下,但我希望有一個解決方案,不依賴於底層標記(或需要事先知道字段名稱),所以我可以k eep我的代碼DRY並在多個視圖中重複使用此方法。 理想情況下,可以取代$(「#formID」)。serialize() –

+0

如何不確定輸入字段?但我實際上沒有嘗試過這些代碼.. –

+0

看起來它應該可以工作,而且它比我試圖使用的frankencode簡單得多。我會測試它,並接受它,如果它。 –