我已经看到很多关于jQuery UI Autocomplete的其他问题,但没有一个完全像我的错误。
我正在使用Rails 3.2和jquery-ui-rails插件(使用jQuery UI Autocomplete 1.9.2)。我的application.js
文件的顶部包含我的所有jQuery:
//= require jquery
//= require jquery_ujs
//= require jquery.ui.core
//= require jquery.ui.autocomplete
我按照Railscast #399进行了设置,但我发现我的自动完成过滤实际上并不起作用,除非我进入控制台,在我的源上运行$ .getJSON,然后在$上运行$ .parseJSON。 getJSON responseText。
如果不这样做,我只需从服务器返回的数组中下载可用的字符串。
这是我在HTML中输入的内容:
<%= text_field_tag 'location_name', nil, id: "all_location_search" %>
在该HTML上调用autcomplete的CoffeeScript:
$ ->
# autocomplete location input
$('#all_location_search').autocomplete
source: "/autocompletions/locations"
在AutoCompletionsController#locations:
def locations
render json: AutoComplete.locations_by(params[:location_name])
end
在AutoComplete.rb中:
def self.locations_by(term)
current = Profile.pluck(:current_location).reject{|n| n.blank?}
current.grep(/^#{term}/)
end
现在,如果我将浏览器指向localhost:3000/autocompletions/locations
,我会看到以下内容:
["Arlington, VA","Atlanta, GA","Boston, MA","Coral Springs, FL","Philadelphia, PA","Sterling, VA"]
但就像我说的那样,除非我进入控制台,否则运行类似:
locations = $.getJSON("/autocompletions/locations")
locationJson = $.parseJSON(locations.responseText)
$('#all_location_search').autocomplete({source: locationJson});
我实际上并没有过滤器。
有几点需要注意:
.autocomplete
。我尝试删除一个,看看是否做了什么,但它没有 <input id="all_location_search" name="location_name" type="text" data-validate="true" class="ui-autocomplete-input" autocomplete="off">
$('#all_location_search').autocomplete({source: "/autocompletions/locations"});
locations = $.getJSON("/autocompletions/locations")
locationJson = $.parseJSON(locations.responseText)
$('#all_location_search').autocomplete({source: locationJson});
答案 0 :(得分:0)
我想出了这个问题。首先,使用jQuery UI Autocomplete命中服务器是一个术语参数,所以我必须与之匹配。所以改变我的控制器方法:
def locations
render json: AutoComplete.locations_by(params[:location_name])
end
要...
def locations
render json: AutoComplete.locations_by(params[:term])
end
修复它。我在其他答案中看到了这一点,但我不认为我输入了我的术语的区分大小写。只需确保您查找params[:term]
。