如何修复jQuery-ui自动完成的jQuery / coffeescript代码?

时间:2014-07-25 02:15:48

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

嗨所以我的代码类似于jquery-ui 1.11:

jQuery ->
  $('#search_terms').autocomplete
    source: (request, response) ->
      $.ajax
        url: '/list.json'
        dataType: "json"
        data: { term: request.term }
        success: (data) ->
          response: $.map(data, (v, i) ->
            label: i
            value: v.toString()
          )

如果我console.log $.map(data, (v, i)...我在Firebug控制台窗口中收到此输出:[Object {label="someX", value="someY"}, Object....]

如何修复$.map代码以获取jquery ui自动完成的正确JSON格式?

JSON.stringify代码周围添加$.map会产生如下内容:

[{"label":"Label1","value":"5"}, ...]似乎应该有效,但却没有。不知道是不是因为我启用了Twitter Bootstrap 3 ...

1 个答案:

答案 0 :(得分:0)

jQuery自动完成小部件需要return an array of strings to offer to the user。如果您希望将值提供给用户,您可以像这样转换数组:

$.map(data, (v, k) ->
  v.toString()
)

或者 - 似乎更有可能 - 如果您希望将标签提供给用户,您可以像这样转换数组:

$.map(data, (v, k) ->
  k
)

相当于data.keys()

您也必须调用响应函数;我认为你的CoffeeScript返回一个带有一个键response的对象。所以你的整体CoffeeScript应该是这样的:

jQuery ->
  $('#search_terms').autocomplete
    source: (request, response) ->
      $.ajax
        url: '/list.json'
        dataType: "json"
        data: { term: request.term }
        success: (data) ->
          response data.keys()
        error: response []

(我已经添加了error回调,因为文档说you must call response even in the case of an error。)

最后,您可以简化此操作。如果您修改服务器以使list.json?term=search之类的请求返回JSON数组字符串,那么您的自动完成功能可能非常简单:

jQuery -> 
  $('#search_terms').autocomplete
    source: "/list.json"