2015-06-05 18 views
7

Są podobne pytania do tego, ale wszystkie wydają się być spowodowane przez tag javascript w ciele, w moim przypadku moje jest w głowie. Nie mogę też przenieść mojego js poza blok zmiany strony (nie sądzę, abym mógł przynajmniej).szyny 4 turbolinks wielokrotne wiązania

Podążam za konwencją rails, uwzględniając wszystkie moje js w każdym pliku zgodnie z zasobem i włączając je do aplikacji. js.

Moi js jest złożyć moje layouty w głowę:

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

Moje pliki wszystkim stosować się do sugestii zawartych w dokumentacji szyn użyć zdarzenia zmian Strona: http://guides.rubyonrails.org/working_with_javascript_in_rails.html#turbolinks

Oto przykład js plik (report.js - Używam skryptu do kawy)

load_reports = -> 
     table = $('#reports').DataTable() 
     company_input_field = $('#rc-cn-st-input') 
     company_input_field.on 'keyup change', -> 
     table.column(2).search(@value).draw() 
     return 

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

To wszystko działa świetnie, dopóki nie skorzystam z przycisku wstecz przeglądarki. Kiedy to zrobię, wydaję wydarzenie dwa razy za każde kliknięcie. Jak mogę to naprawić i na czym polega konwencja?

W innych przypadkach przeniosłem moje js poza blokiem zmian strona i tak:

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

Ale to nie wydaje się praktyczne w przypadku powyżej, tabela danych jquery Mam przedstawieniu jest tylko na jednej stronie i trzeba to tylko skonfigurować, gdy jestem na tej stronie.

Spojrzałem na funkcję .off(), ale nie mogłem wymyślić, jak jej użyć w tym przypadku, wszystko, co próbowałem, wydaje się albo usunąć aktywny słuchacz, albo zakończyć się niepowodzeniem.

Odpowiedz

1

Spróbuj użyć

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

zamiast

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

to, co pracował dla mnie, to tylko raz załadować stronę.

Przy okazji, dotyczy to szyn 4.2 i powyżej https://stackoverflow.com/a/38457941/7252292