如何使用turbolinks在Rails4上启用`sorttable.js`
- Rails 4.2.0,turbolinks(2.5.3)
- jquery-rails(4.0.3),jquery-ui-rails(5.0.3)
sorttable.js
- 适用于Chrome,Firefox和IE的应用
应该发生什么 :无论是重定向,渲染还是只是单击应用程序中的新页面,任何具有类可排序表的表(我在原始JS中编辑它)都应该按列标题排序。
实际发生的事情 :我在联系页面上。 我点击刷新,JS中的记录器语句出现了。 该插件按预期工作。 如果我导航到Home,然后返回到Contacts,该文件仍然列在页面源中,但不显示任何记录器语句。 该插件不起作用。
我们的application.js
读取如下:
//= require jquery //= require jquery_ujs //= require jquery-ui //= require jquery_nested_form //= require bootstrap //= require sorttable //= require_directory . //= require autocomplete-rails //= require turbolinks //= require bootstrap-switch
每页或完全禁用Turbolink对我们来说不是一个解决方案。 如果文件不能与turbolinks一起使用,我愿意使用gem; 但是,gem应该为应用程序添加一些代码。 我们宁愿没有专门用于选择要排序的列的类。 此外,一些待排序的列不是来自ActiveRecord(如1个单元格中的2个属性)。
经过大量调试后,我弄清楚为什么turbolinks不喜欢sorttable.js
。 JS文件包含触发器(一些基于浏览器类型)以在文档加载时启动sorttable。 这样的事件监听器与turbolinks不兼容。 我做了这项工作的目的如下。
-
将
vendor/assets/javascripts/sorttable.js
移至app/views/shared/js/_sorttable.html.haml
-
使用以下命令对新文件进行前缀
:javascript
(%script{languauge: "javascript"}
),并缩进所有后续行2个空格 -
从
application.js
删除sorttable -
在所有相关页面的顶部,添加以下代码块:
= render 'shared/js/sorttable' %script $(document).on("page:change", sorttable.init)
有关代码示例和进一步说明,请参阅此要点 。