我需要为 js 对象动态添加属性,我通过 eval() 实现了这一点:
$ ->
  #Methods
  window.add_address = (attributes, id=new Date().getTime())->
    $container = $('ul#addresses_list')
    $unit = $('<li>')
    $.each attributes, (key,value)->
      $input = $('<input type="hidden">')
      $input.attr 'name', "contact[addresses_attributes][#{id}][#{key}]"
      $input.val value
      $unit.append $input
    $container.append $unit
  #Events
  #Add address button
  $('a#add_address').on 'click', (ev)->
    attributes =  new Object
    $('#address_fields').find('input').each ->
      eval("attributes.#{$(this).attr 'id'}='#{$(this).val()}'");
    add_address attributes
这很完美,但我觉得很尴尬eval(),有没有办法做到这一点“更漂亮”?我的意思是,我搜索了Jquery .serializeArray()之类的替代方法,但它似乎只适用于查询的表单,我需要从该#address_fieldsdiv 获取输入。