在Turbolinks存在的情况下导航回来时,如何防止jQuery DataTable上的重复包装?

我在一个新的Rails 4.2项目中使用jQuery DataTables。 我有大量的结果需要在组,项目和状态上进行过滤。 选择组通过应用程序的往返过滤项目选择,项目选择以相同的方式过滤表格。 我将组和项目保存在会话变量中,这样当用户更改页面时,然后单击主链接返回,它将记住他们的选择,并将它们返回到原来的位置。 这一切都像我打算一样。

问题是使用浏览器的后退按钮从不同的页面返回到表将导致DataTable周围的重复包装器(带有搜索框,项目数下拉列表和分页链接)。

在此处输入图像描述

我添加了jquery-turbolinks gem。

我试过摆弄事件听众 ,但我无法使这些想法发挥作用。

我已经尝试使用data-turbolinks=false来使用Turbolinks免除页面主体。

我已经尝试将我的脚本密钥更改为$(document).ready() ,如page:load 。 他们都没有阻止这一点。

我已经尝试将DataTable的所有脚本加载为Turbolinks,并在该特定页面中使用data-turbolinks-eval=false (使用content_for :head )。

我发现的唯一一件事就是阻止这个包装器重复发生就是简单地删除调用以完全包含来自资产的turbolinks JS。 如果我不知道比我更聪明的人认为它应该是应用程序的一部分,我已经做到了这一点。 我不知道该怎么办。 我正在寻找处理这个问题的优雅方式。

我的表工作正如我所料,具有以下设置。

对于datatable.jsapplication.js

 var dataTable = null document.addEventListener("turbolinks:before-cache", function() { if (dataTable !== null) { dataTable.destroy() dataTable = null } }) 

对于视图。

  .. 

参考文献:

  • Turbolinks 5和DataTables协调工作
  • 浏览器后退按钮会导致某些脚本重新评估