javascript - 如何使用 turbolinks 在 Rails4 上启用 `sorttable.js`

标签 javascript ruby-on-rails ruby-on-rails-4 turbolinks 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 上使用的应用

应该发生什么:无论是重定向、呈现还是只是单击应用中的新页面,任何具有 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 不兼容。我为完成这项工作所做的工作如下。

  1. vendor/assets/javascripts/sorttable.js 移动到 app/views/shared/js/_sorttable.html.haml

    <
  2. 为新文件添加前缀 :javascript (%script{languauge: "javascript"}),并在所有后续行中缩进 2 个空格

  3. application.js

    中删除排序表
  4. 在所有相关页面的顶部,添加以下代码块:

    = 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/

相关文章:

ruby-on-rails - 使用 sidekiq 只执行众多重复作业之一?

ruby - 在 Carrierwave 中手动上传和保存文件

ruby-on-rails - 将大量美元值输入到 Rails 货币对象中

ruby-on-rails - rails 4 : around_action with parameter

ruby-on-rails - Sunspot Solr 搜索参数 "with"不适用于字符串

javascript - 如何获取动态变化的类的 HTML 名称?

javascript - 一个线性 JavaScript 函数用于编辑对象数组中特定属性的值

javascript - rails : remote: true from select_tag

javascript - 表单显示,同时将 acts-as-taggable-on gem 与 jquery tag-it 插件集成

javascript - 如何使用语义 UI 和 AngularJS 获取选中的复选框?