2015-06-05 17 views
7

Es gibt ähnliche Fragen dazu, aber sie scheinen alle durch Javascript-Tag im Körper verursacht werden, in meinem Fall ist meiner im Kopf. Ich kann auch nicht bewegen meine js außerhalb der Seite ändern Block (ich glaube nicht, dass ich mindestens)rails 4 turbolinks multiple bindings

Ich folge Schienen Konvention, indem ich alle meine js in jeder Datei entsprechend der Ressource und einschließlich sie in der Anwendung. js.

Mein js ist in meinem Layout im Kopf-Datei:

<!DOCTYPE html> 
<html> 
<head> 
    <%= javascript_include_tag 'application', 'data-turbolinks-track' => true %> 

Meine Dateien alle der Vorschlag in den Schienen Dokumentation folgen zu verwenden, um Ereignisse Seitenwechsel: http://guides.rubyonrails.org/working_with_javascript_in_rails.html#turbolinks

Hier ist ein Beispiel js-Datei (report.js - Ich benutze Kaffee-Skript)

Das alles funktioniert gut, bis ich den Browser zurück-Taste verwenden. Sobald ich das mache, bekomme ich das Ereignis zweimal für jeden Klick ausgelöst. Wie behebe ich dies und was ist die Konvention zu folgen?

In anderen Fällen zog ich meinen js außerhalb des Seitenwechsels Block und tat

$(document).on 'click', 'td.details-control', -> 
    # do something 

Aber dies scheint nicht praktikabel in dem obigen Fall, die jquery Datentabelle mir Referenzierung bin, ist nur auf einer Seite und muss nur eingerichtet werden, wenn ich auf dieser Seite bin.

Ich sah auf .off() -Funktion, aber konnte nicht herausfinden, wie es in diesem Fall zu verwenden, scheint alles, was ich versuchte, entweder den aktiven Listener entfernen oder fehlschlagen.

Antwort

1

Try

$(document).on('turbolinks:load', load_reports) 

statt

$(document).on('page:change', load_reports). 

verwenden, was für mich gearbeitet ist, ist es nur geladen, die einmal Seite.

Übrigens ist dies für Schienen 4.2 und höher https://stackoverflow.com/a/38457941/7252292

Verwandte Themen