2013-05-25 11 views
6

Ich arbeite mit Rails 4 und möchte das eingebaute Turbolink gem. Ich bin glücklich mit allem was es tut, außer dass ich möchte, dass es bei jeder Seitenanfrage eine der js-Dateien neu lädt.Re-rendering spezifische js-Datei mit aktivierten Turbolinks

Mit anderen Worten, ich möchte eine bestimmte js-Datei Turbolinks ignorieren, wie kann ich das tun?

Antwort

7

Sie können das Ereignis 'page: load' von Turbolinks verwenden, um eine Initialisierungsfunktion zu verbinden. Es wird immer dann aufgerufen, wenn Turbolinks Ihre neue Seite vollständig neu laden.

function initialize() { 
    //js code what you want run always 
} 

$(document).ready(initialize); 
$(document).on('page:load', initialize); 

Wenn Sie jQuery viel verwenden, ist es sinnvoll, in Ihrem Gemfile

gem 'jquery-turbolinks' 

und Ihre application.js

//= require jquery 
//= require jquery.turbolinks 

Turbolinks hat zwei andere nützliche Ereignisse zu installieren:

page:fetch //when new page begin to download 
page:change //when the page has changed over 
+1

das Problem, das Sie hier beachten müssen Allerdings lädt es jedes Mal, wenn es geladen wird, zusätzlich zu dem Skript, das bereits geladen wurde. Wenn Sie also Ereignisse im Skript für ex binden, werden sie immer wieder gebunden. Immer noch auf der Suche nach der besten Lösung, um dies zu vermeiden. – ifightcrime

+1

Ich denke, diese Probleme existieren nicht mehr mit den neuesten Turbolinks und jquery-turbolinks ... Sie können Ihrem dom-Element immer eine Extraklasse hinzufügen, die als semafor arbeiten könnte, um Mehrfachgrenzen zu vermeiden ... '$ (#yoursector: not (.bounded)). addClass ('bounded'). on ('ein Ereignis', do_this); ' – Zoltan

+2

Richtig, wollte nur die Leute darauf aufmerksam machen. Etwas, das nicht sehr oft erwähnt wird. Ich habe ein schnelles Skript geschrieben, das alle Ereignisse automatisch aufhebt, die hinzugefügt wurden, bevor die nächste Seite geladen wurde. – ifightcrime