Ciao a tutti,
ho bisogno di un aiuto per capire come il codice javascript si integri
in un’app Rails, ovvero quali sono le best practices al proposito. In
rete non ho trovato risposte soddisfacenti alle mie perplessità.
Prima dell’avvento di UJS il codice js era inserito all’interno delle
viste, ora viene collocato in app/assets/javascript/. Suppongo di avere
una semplice azione invocata dal click su un elemento grafico (uso
codice coffeescript per semplicità):
$("#dropdown").change( ->
…
)
Questo frammento viene salvato in books.js.coffee che viene caricato
assieme a tutti i file specificati in application.js. Tuttavia l’azione
riportata è visibile e disponibile a tutta l’applicazione e non, come
succede con gli helper, alle sole viste di books, e questa incoerenza a
me non piace molto. Inoltre porta a rischi di collisioni tra nomi (devo
fare attenzione ai selettori che uso).
Procedo con un esempio. Suppongo di avere due liste dropdown: il valore
della prima lista determina il caricamento della seconda lista (es.
regioni e provincie italiane).
Ogni volta che l’utente seleziona un elemento diverso dalla prima lista,
viene invocata una funzione js ‘region_changed’ che effettua una
chiamata ajax che provvede a popolare gli elementi della seconda lista
dropdown:
$("#regione_id").change(function() {
region_changed();
})
Definisco la mia funzione in pippo.js.coffee. Questa funzione dovrà
essere chiamata anche al completamento del caricamento della pagina web.
Che faccio? Inserisco un bel pezzo di codice ‘obtrusive’ tipo
nella mia vista?
E se uso haml per le viste come faccio?
Inoltre: la mia funzione va definita globale (@region_changed) per
essere chiamata dalla vista?
E se voglio usare un helper di routing dentro la funzione per l’URL
della chiama Ajax? Come faccio?
Mi spiego meglio, nel vecchio mondo obtrusive avrei scritto nella vista
(dentro la funzione ‘region_changed’):
$.get(’<%= province_of_region_path %>’, { region_id: id },
function(data) {
…
Ora che la funzione va messa in app/assets/javascript come si inietta
l’URL giusto?
Troppe domande? Troppa confusione mia?
Sono ben accolti suggerimenti di lettura di articoli o blog…
Grazie mille per ogni spiegazione o suggerimento,
ciao
iwan