【发布时间】:2011-10-24 20:44:27
【问题描述】:
我正在运行一个 ruby on rails 应用程序,并且我正在使用 jQuery 在表单中显示一些自动完成建议。自动完成建议来自 2 个不同的数组,我将它们合并为一个,然后显示。
现在,问题是我需要以与来自另一个文件的结果不同的方式显示来自一个文件的结果。我该怎么做呢?也就是说,它们都将在同一个自动完成框中,但其中的结果可能有不同的字体、颜色等(单独的 CSS 挂钩?)
autocomplete.js:
$(function() {
$('.autocomplete_field').autocomplete({
source: '/locations/autocomplete.js'
});
});
locations_controller.rb:
def autocomplete
respond_to do |format|
format.js do
client = GooglePlacesAutocomplete::Client.new(:api_key => "mykey")
locations = client.autocomplete(:input => params[:term], :lat => "x", :lng => "y", :radius => "25000")
add = Location.all.map { |l| { :label => l.address, :value => l.address } }
locations = locations.predictions.map { |l| {:label => l.description, :value => l.description} }
final = add + locations
render :json => final
end
end
end
如您所见,locations_controller 只是呈现一个 JSON 对象,它是两个连接到 URL /locations/autocomplete.js 的数组,autocomplete.js 呈现。
我意识到我可能需要修改我的控制器以返回 2 个单独的 JSON 对象,一个用于add,一个用于location。我可以这样做,但我不知道如何在最终的自动完成中将它们合并在一起,以及如何以不同的方式格式化来自它们的查询。
我在 javascript/jquery 方面非常缺乏经验,因此即使您忽略了对 Rails 应用程序所需的更改,我也会很感激能很好地解释这些组件的答案。
归结为:
当我查看自动完成框的HTML时,每个自动完成项如下:
<li class="ui-menu-item" role="menuitem">
<a class="ui-corner-all" tabindex="-1">(autocomplete suggestion)</a>
</li>
除了“ui-menu-item”和“ui-corner-all”之外,我只需要添加一个额外的类到从一个 JSON 获得的结果中,它不会出现在结果中从其他人那里获得。
现在,我看到 here 可以通过修改 .renderItem 函数来添加一个额外的类,但是我如何将它应用于某个 JSON 对象(js 方法)中的每个元素,或者将它应用于预先(通过rails)在ruby数组中的每个元素?
【问题讨论】:
标签: javascript jquery ruby-on-rails ruby-on-rails-3 autocomplete