我在Rails应用上运行ruby,我使用jQuery在窗体中显示一些自动填充建议。自动填充建议来自两个不同的阵列,我将它们合并为一个,然后显示。jQuery自动完成:以不同方式显示某些对象?
现在,问题是我需要以不同于另一个文件的结果显示一个文件的结果。我该怎么做呢?也就是说,他们都将在同一个自动完成框,而是从一个结果可能有不同的字体,颜色等
autocomplete.js(一个独立的CSS挂钩?):
$(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方法)将此每个元素,或将此运用到每一个元素事先(通过铁轨)红宝石阵列?
对不起,我不知道很多JS都没有。我在哪里可以定义JS中的'isAddress?'函数,以及如何在元素位于特定的JSON对象时返回true,如果是另一个JSON对象,则返回false?这样我可以将特殊地址作为单独的JSON返回,然后对它们进行不同的格式化。 –
你可以用你从服务器端代码发回的数据向下发送isAddress。在构建地址数组时,请包含一个对地址始终为true的“isAddress”属性。您可以完全省略其他列表。 –