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.