【发布时间】:2016-02-23 09:15:25
【问题描述】:
提前输入功能在它应有的地方工作。但问题是,提前输入功能会在每个数据请求上发出 JSON 请求,而实际上它应该只针对一个特定请求发生。
我有以下控制器:
#controllers/agencies_controller.rb
class AgenciesController < ApplicationController
def get_unique_agency_names
@unique_agency_names = Agency.uniq.pluck(:name)
respond_to do |format|
format.json { render json: @unique_agency_names }
end
end
...
end
我的 javascript 文件中有以下内容:
#app/assets/javascripts.agencies/index.js
$(document).ready(function(){
/* For typeahead functionality on name input of search form for agencies */
var agency_names = new Bloodhound({
datumTokenizer: Bloodhound.tokenizers.whitespace,
queryTokenizer: Bloodhound.tokenizers.whitespace,
prefetch: '../agencies/get_unique_agency_names.json'
});
$('#prefetch .typeahead.name_input').typeahead(null, {
name: 'agency_names',
source: agency_names
});
});
为了完成,这里是我希望此功能发生的一个地方:以这种形式:
# just showing the relevant part of the form
<div class="form-group" id="prefetch">
<%= f.label :name_cont, "Agency Name" %>
<%= f.text_field :name_cont, class: "form-control typeahead name_input", placeholder: "Enter Agency Name" %>
</div>
这是我在config/routes.rb的相关路线
resources :agencies do
collection do
get 'get_unique_agency_names'
end
end
我的具体问题是:如何确保仅在应该调用 GET "/agencies/get_unique_agency_names" 时才调用它?现在它正在为每个请求附加这个 JSON 请求。我只希望 JSON 请求针对一个特定请求发生。
【问题讨论】:
-
不就是
prefetch的事情吗? “预取数据在初始化时被提取和处理。” -
@DaveNewton 我正在考虑这个问题。我只是不确定我应该在它的位置放什么。
-
不预取?仅在有意义的页面上预取? Bloodhound 存储库列出了您可以使用的预取选项。如果它出现在每个请求中,则意味着即使在无关紧要的页面上也包含此 JS,并且非绝对 URL 意味着它将将该 URL 附加到您所在的任何页面。
标签: javascript ruby-on-rails ruby json twitter-typeahead