Rails 4 turbolinks多重绑定

7

有类似的问题,但它们似乎都是由于body中的javascript标签引起的,在我的情况下,我的标签在head中。我也不能将我的js移动到页面更改块之外(至少我认为不能)

我遵循Rails约定,按资源将所有js放在每个文件中,并在application.js中包含它们。

我的js在layouts文件的head中:

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

我的文件都遵循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)

这一切都很顺利,直到我使用浏览器的后退按钮。一旦这样做,每次点击时我会收到两次事件触发。我该如何解决这个问题,并遵循哪些约定?
在其他情况下,我将我的js代码移出页面更改块,并执行以下操作:
$(document).on 'click', 'td.details-control', ->
  # do something

但是在上述情况下似乎并不实用,我参考的jQuery数据表只有一个页面,并且只需要在我访问该页面时进行设置。
我确实查看了.off()函数,但无法弄清如何在这种情况下使用它,我尝试的所有方法似乎都要么移除活动侦听器,要么失败。
1个回答

1
尝试使用


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

替代

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

这是对我有效的方法,它只加载了页面一次。

顺便说一下,这适用于Rails 4.2及以上版本 https://dev59.com/PWMl5IYBdhLWcg3wAC6h#38457941


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接