jQuery-UI Autocomplete Widget将多个参数传递给Rails服务器端数据源

时间:2012-10-31 23:29:18

标签: ruby-on-rails jquery-ui jquery-ui-autocomplete

AutoComplete Railscast的评论部分中有一个问题没有得到答复,我需要帮助解决同样的问题。 http://railscasts.com/episodes/102-auto-complete-association-revised?view=comments#comment_159833

我正在使用来自Rails控制器的数据源实现jQuery-UI自动完成,而Rails控制器又调用Foursquare API。 Foursquare API需要2个参数(“查询”和“纬度/经度”值)。

它发送给Rails控制器的自动完成小部件的默认参数是包含“查询”的参数[:term]。我需要自动完成窗口小部件从另一个text_field中提取值(让我们称之为geocode_location字段)并将其作为“latlong”参数传递。

如此有效,对Rails控制器的GET请求将是

请求网址:http://localhost:3000/foursquare?ll=37.7+-122.5&term=McDonalds

而不是

请求网址:网址:http://localhost:3000/foursquare?term=McDonalds

以下是我当前的coffeescript文件。我需要尝试传递extraParams或某种方式让它知道传递一个名为:latlong的参数。如何使用Coffeescript和此类数据源进行此操作?

 $('[type="text"][name*="[location]"]').autocomplete
    source: $('[type="text"][name*="[location]"]').data('autocomplete-source')
    focus: (event, ui) ->
      event.preventDefault()
      $(this).val ui.item.label
    select: (event, ui) ->
      event.preventDefault()
      $(this).val ui.item.label
      $(this).siblings('[name*="[foursquare_id]"]').val ui.item.value

我对Coffeescript语法不太熟悉,但非常感谢这里的帮助。 这里有一个类似的问题,但自动完成结果的数据源是不同的。 jQuery UI - Autocomplete with extra params - returned data

1 个答案:

答案 0 :(得分:1)

终于在很多很多小时之后得到了它。有关如何应用其他参数传递到服务器端Rails控制器的语法,请参见下文。如此有效,我现在可以得到这个请求URL:http:// localhost:3000 / foursquare?ll = 37.7 + -122.5& term = McDonalds。希望这有助于某人。

 $('[type="text"][name*="[location]"]').autocomplete(
    source: (request, response) ->
      $.ajax 
        url: $('[type="text"][name*="[location]"]').data('autocomplete-source')
        data: {term: request.term, ll: this.element.siblings('[name*="[geocode_location]"]').val()}
        contentType: "application/json; charset=utf-8"
        success: (data) ->
          response $.map(data, (item) ->
            value: item.value
            label: item.label
            address: item.address
          )

    focus: (event, ui) ->
      event.preventDefault()
      $(this).val ui.item.label
    select: (event, ui) ->
      event.preventDefault()
      $(this).val ui.item.label
      $(this).siblings('[name*="[foursquare_id]"]').val ui.item.value
  ).data("autocomplete")._renderItem = (ul, item) ->
    $("<li>").data("item.autocomplete", item).append("<a>" + item.label + "<br>" + item.address + "</a>").appendTo ul