gmaps-autocomplete-rails写Lang + Long写入隐藏字段

时间:2015-09-24 14:06:58

标签: jquery ruby-on-rails coffeescript gmaps4rails

我希望有人可以帮助我,我的gmaps-autocomplete-rails工作正常,但是我很难理解如何将经度和纬度写入隐藏字段以便提交表单。

我可以把它写成一个只是无法做出这部分指南的正面或反面

以下默认方法可以由配置替换:

positionOutputter updateUI updateMap 这些方法用于控制gmaps数据如何用于更新页面上的UI,例如位置输出和地图位置更新。自定义这些所需。

默认逻辑(取自GmapsCompleterDefaultAssist)是:

 defaultUpdateMap: (geometry) -> 
    map     = @map
    marker  = @marker

    map.fitBounds(geometry.viewport) if map
    marker.setPosition(geometry.location) if marker

  # fill in the UI elements with new position data
  defaultUpdateUI: (address, latLng) ->
    $(@inputField).autocomplete 'close'

    @debug 'country', @country

    updateAdr = address.replace ', ' + @country, ''
    updateAdr = address

    @debug 'updateAdr', updateAdr

    $(@inputField).val updateAdr
    @positionOutputter latLng

  defaultPositionOutputter: (latLng) ->
    $('#gmaps-output-latitude').html latLng.lat()
    $('#gmaps-output-longitude').html latLng.lng()

我认为我需要做的就是将最后一部分改为.val而不是.html

但是这个地方和方式被添加到coffeescript中我迷失了。

如果我直接写入隐藏字段,我会得到以下内容:

<input id="gmaps-output-longitude" type="hidden" name="submission[longitude]">-019019992</input>

显然没有在表单中传递,因为它不是值=“”

我已经尝试过写一个跨度并进行改变以写入隐藏的vield,但也没有欢乐。

jQuery ->

    completer = new GmapsCompleter
      inputField: '#gmaps-input-address'
      errorField: '#gmaps-error'

    completer.autoCompleteInit
      country: "us"


    $('#gmaps-output-longitude').on('change', updateChange)

updateChange = ->
  $('#submission_longitude').val($('#gmaps-output-longitude'))
  $('#submission_latitude').val($('#gmaps-output-latitude'))

任何建议都非常感谢。

1 个答案:

答案 0 :(得分:1)

事实证明我错过了一点,但是为了将来参考覆盖默认行为,您需要包含辅助选项和带有coffeescript扩展的引用。

这是我最后一份工作的coffeescript,只需要确保你在课堂上出类拔萃。

jQuery ->
  completer = new GmapsCompleter
    inputField: '#gmaps-input-address'
    errorField: '#gmaps-error'
    assist: MyCompleterAssist


  completer.autoCompleteInit
    country: "us"



class MyCompleterAssist extends GmapsCompleterDefaultAssist
  positionOutputter: (latLng) ->
   $('#gmaps-output-latitude').val latLng.lat()
   $('#gmaps-output-longitude').val latLng.lng()