2015-06-05 46 views
7

也有类似的问题,但它们都似乎是由身体中的JavaScript标记引起的,在我的情况下,我的头部是。我也不能移动页面换页块外的我的js(我认为我至少不能)rails 4 turbolinks多个绑定

我遵循rails约定,让每个文件中的所有js根据资源并将它们包含在应用程序中。 JS。

我的JS在我的布局文件的头部:

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

我的文件都遵循轨道文档中的建议,使用页面更改事件: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) 

这一切的伟大工程,直到我用浏览器的后退按钮。一旦我这样做了,每次点击都会触发2次事件。我该如何解决这个问题,遵循什么规定?

在其他情况下,我提出我的js的页面变化外块,做:

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

但是,这似乎并没有在上述情况中的实际,我引用了jQuery数据表仅在一个页面上,并且只有当我在该页面上时才需要进行设置。

我看过.off()函数,但无法弄清楚如何在这种情况下使用它,我试过的所有东西似乎都是删除活动侦听器或失败。

回答

1

尝试使用

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

代替

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

这是对我工作,只加载页面一次。

顺便说一句,这是用于轨4.2和以上https://stackoverflow.com/a/38457941/7252292