La funzionalità type ahead funziona dove dovrebbe. Il problema però è che la funzionalità type ahead sta facendo la richiesta JSON su ogni richiesta per i dati quando in realtà dovrebbe accadere solo per una richiesta specifica.Typeahead in rails app: aggiungi la richiesta JSON a una sola richiesta specifica invece di aggiungere la richiesta JSON ad ogni richiesta tramite prefetch
ho il seguente controller:
#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
Ho il seguente nel mio file 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
});
});
E proprio per il completamento, qui è l'unico posto dove voglio questa funzionalità accada : in questa forma:
# 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>
Ecco il mio percorso rilevante in config/routes.rb
resources :agencies do
collection do
get 'get_unique_agency_names'
end
end
La mia domanda specifica è: come posso garantire che il GET "/agencies/get_unique_agency_names"
viene chiamato solo quando si suppone che? In questo momento sta aggiungendo questa richiesta JSON per ogni richiesta. Voglio solo che la richiesta JSON si verifichi per una richiesta specifica.
Non è solo la cosa 'prefetch'? "I dati prefetched vengono recuperati ed elaborati durante l'inizializzazione." –
@DaveNewton Ci stavo pensando. Non sono sicuro di cosa dovrei mettere al suo posto. – Neil
Non precaricare? Solo prefetch sulle pagine in cui è significativo? Il repository Bloodhound elenca le opzioni di prefetch che è possibile utilizzare. Se è su ogni richiesta, significa che questo JS viene incluso anche nelle pagine per le quali non ha importanza e l'URL non assoluto significa che aggiungerà l'URL a qualsiasi pagina visualizzata. –