rails 4 turbolinks多重绑定

Joe*_*lio 7 jquery turbolinks ruby-on-rails-4

对此有类似的问题,但它们似乎都是由身体中的javascript标签引起的,在我的情况下我的是在头脑中.我也无法将我的js移动到页面更改块之外(我认为至少我不能)

我遵循rails约定,根据资源在每个文件中包含所有j,并将它们包含在application.js中.

我的js位于头部的布局文件中:

<!DOCTYPE html>
<html> 
 <head>
   <%= javascript_include_tag 'application', 'data-turbolinks-track' => true %>
Run Code Online (Sandbox Code Playgroud)

我的文件都遵循rails文档中的建议来使用页面更改事件:http://guides.rubyonrails.org/working_with_javascript_in_rails.html#turbolinks

这是一个示例js文件(report.js - 我使用咖啡脚本)

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)
Run Code Online (Sandbox Code Playgroud)

这一切都很好,直到我使用浏览器后退按钮.一旦我这样做,我每次点击都会触发2次事件.我如何解决这个问题以及遵循的惯例是什么?

在其他情况下,我将我的js移动到页面更改块之外并执行:

$(document).on 'click', 'td.details-control', ->
  # do something
Run Code Online (Sandbox Code Playgroud)

但是在上面的情况下这似乎不实用,我引用的jquery数据表只在一个页面上,只需要在我在该页面上时进行设置.

我确实看过.off()函数,但在这种情况下无法弄清楚如何使用它,我尝试过的所有东西似乎要么删除活动的监听器,要么失败.

小智 1

尝试使用

$(document).on('turbolinks:load', load_reports) 
Run Code Online (Sandbox Code Playgroud)

代替

$(document).on('page:change', load_reports). 
Run Code Online (Sandbox Code Playgroud)

这对我有用,它只加载页面一次。

顺便说一句,这是针对 Rails 4.2 及更高版本的/sf/answers/2692055901/