タイプ先読み機能は、想定されるところで機能します。しかし、問題は、先読み機能が、特定の1つのリクエストに対して実際にしか発生しない場合に、データのリクエストごとにJSONリクエストを作成することです。Typeahead in rails app:プリフェッチを介してすべてのリクエストにJSONリクエストを追加するのではなく、特定のリクエストにJSONリクエストを追加します。
私は、次のコントローラがあります。私は私のjavascriptのファイルに次き
#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
を:
#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>
の私の関連ルートです
resources :agencies do
collection do
get 'get_unique_agency_names'
end
end
私の具体的な質問は:どのように私はそれが想定されたときにGET "/agencies/get_unique_agency_names"
にのみ呼び出されることを保証することができますか?今はすべてのリクエストに対してこのJSONリクエストを追加しています。 1つの特定のリクエストに対してJSONリクエストを発生させたいだけです。
「プリフェッチ」のものではありませんか? "プリフェッチされたデータは初期化時にフェッチされ、処理されます。" –
@DaveNewton私はそれについて考えていました。私はその場所に置くはずのものがわからない。 – Neil
プリフェッチしませんか?意味のあるページのプリフェッチのみですか? Bloodhoundレポには、使用できるプリフェッチオプションがリストされています。すべてのリクエストにこのJSが含まれていることを意味していれば、それは重要ではないページにも含まれています。絶対的でないURLは、あなたのページにURLを追加することを意味します。 –