2013-08-09 23 views
7

Sto sviluppando un'applicazione Ruby on Rails 4 che utilizza la gemma Turbolinks. Ho notato che quando si fa clic su un link il layout è ancora reso lato server, ma il codice JavaScript di Turbolinks non fa altro che estrarre il corpo da questo contenuto renderizzato. La mia domanda è dal lato del controller è possibile determinare se una richiesta è fatta tramite Turbolinks o meno. Essenzialmente nel caso in cui venga fatta una richiesta tramite Turbolinks, voglio impostare il layout su false in modo da non eseguire codice non necessario. Nel mio ApplicationController ho già il seguente codice:Controller Rails Verifica se richiesta Turbolinks

# Don't use layout when AJAX request 
layout proc { |controller| controller.request.xhr? ? false: "application" } 

Questo codice impedisce una richiesta AJAX dal rendere l'intestazione se faccio una richiesta AJAX tramite jQuery, ma non sembra di fare nulla quando si tratta di Turbolinks .

+0

Il rendering senza un layout non interrompe il processo Turbolinks? Turbolinks (citazione): 'mantieni viva l'istanza della pagina corrente e sostituisce solo il corpo e il titolo nella testa'. Quindi sembra che Turbolinks si basi sul layout di pagina completo da inviare. – zwippie

risposta

0

Anche se questo è un po 'un trucco, ho trovato che il controllo dell'intestazione per "X-XHR-Referer" sembra fare il trucco.

unless request.headers["X-XHR-Referer"].present? 
    do_some_stuff 
end 

Sembra che i Turbolink aggiungano l'intestazione per un po 'di gestione del reindirizzamento. Questo potrebbe cambiare in futuro però.

+0

Qualche tempo fa ho implementato la mia versione bastarda di Turbolink per ottenere questo risultato, ma ho scoperto che a volte quando si utilizzava il pulsante Indietro nel browser, una pagina poteva essere visualizzata senza il corpo e le cose apparirebbero terribili. Ho subito deciso che non ne valeva la pena e dovrei usare PJAX o AJAX standard per le mie esigenze. Ma grazie per la condivisione. –

Problemi correlati