- Rails 4.2.0、turbolinks (2.5.3)
- jquery-rails (4.0.3), jquery-ui-rails (5.0.3)
- >
sorttable.js
- 在 Chrome、Firefox 和 IE 上使用的应用
应该发生什么:无论是重定向、呈现还是只是单击应用中的新页面,任何具有 sorttable
类的表(我在原始文件中对其进行了编辑JS) 应该可以按列标题排序。
实际发生了什么:我在联系人页面上。我点击刷新,出现 JS 中的记录器语句。该插件按预期工作。如果我导航到主页,然后返回到联系人,该文件仍列在页面源中,但没有记录器语句出现。该插件不起作用。
我们的 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
禁用每页或完全禁用 Turbolinks 对我们来说不是解决方案。如果文件不适用于 turbolinks,我愿意使用 gems;但是,gem 应该向应用程序添加很少的代码。我们宁愿没有专门用于选择要排序的列的类。此外,某些要排序的列不是来自 ActiveRecord(例如 1 个单元格中的 2 个属性)。
最佳答案
经过多次调试,我明白了为什么 turbolinks 不喜欢 sorttable.js
。 JS 文件包含触发器(一些基于浏览器类型)以在文档加载时启动排序表。此类事件监听器与 turbolinks 不兼容。我为完成这项工作所做的工作如下。
将
<vendor/assets/javascripts/sorttable.js
移动到app/views/shared/js/_sorttable.html.haml
为新文件添加前缀
:javascript
(%script{languauge: "javascript"}
),并在所有后续行中缩进 2 个空格从
中删除排序表application.js
在所有相关页面的顶部,添加以下代码块:
= render 'shared/js/sorttable' %script $(document).on("page:change", sorttable.init)
有关代码示例和进一步说明,请参阅 this gist .
关于javascript - 如何使用 turbolinks 在 Rails4 上启用 `sorttable.js`,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30242006/