2012-11-09 159 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简单得多。我会测试它,并接受它,如果它。 –