Ruby on rails 使用Ajax的Rails数据表不使用Turbolink 所以我有一个新的Rails 4应用程序使用基金会,我今天开始将数据集成在一起,并在使用Ajax调用将其设置为页面后遇到了一个小的挫折。p>

Ruby on rails 使用Ajax的Rails数据表不使用Turbolink 所以我有一个新的Rails 4应用程序使用基金会,我今天开始将数据集成在一起,并在使用Ajax调用将其设置为页面后遇到了一个小的挫折。p>,ruby-on-rails,ajax,datatables,turbolinks,Ruby On Rails,Ajax,Datatables,Turbolinks,当我从一个页面(本例中为主页)单击一个链接,该链接将我发送到包含数据表的页面时,这些表将在不显示任何条目、搜索框或分页等的情况下呈现。但是,如果我刷新浏览器,页面将完全刷新,并且进行ajax调用,并且表将正确填充 在查看网络流量后,我发现单击链接后,响应为304:未修改。由于没有对JS和CSS等的其他请求,我假设JS不会重新加载并进行适当的(#tasks').dataTable({…})调用 另外,需要注意的是,该表位于部分“tasks_index.html.haml”中 然而,我记得的一件事是

当我从一个页面(本例中为主页)单击一个链接,该链接将我发送到包含数据表的页面时,这些表将在不显示任何条目、搜索框或分页等的情况下呈现。但是,如果我刷新浏览器,页面将完全刷新,并且进行ajax调用,并且表将正确填充

在查看网络流量后,我发现单击链接后,响应为304:未修改。由于没有对JS和CSS等的其他请求,我假设JS不会重新加载并进行适当的(#tasks').dataTable({…})调用

另外,需要注意的是,该表位于部分“tasks_index.html.haml”中

然而,我记得的一件事是,我仍然在使用Turbolinks gem。我试着禁用它,看看这是否能解决我的问题,令人惊讶的是,它做到了


那么,是什么导致TurboLink阻止正常javascript加载到页面上呢?有没有办法强制TurboLink始终加载某些页面?我甚至不使用TurboLink是否更好?

我猜您正在使用
$(文档)。准备好
事件初始化数据表。使用turbolinks时,单击链接时不会触发此事件,因为turbolinks会加载页面本身。因此,您应该改用
文档页面:change
事件。请参见此处:

正如Lurn所说,您必须在“turbolinks:load”上的.coffee文件中添加->
,我成功地使用了以下CoffeeScript代码使DataTables在Rails 5/turbolinks 5上正常工作

如果使用此脚本,则在点击浏览器上的“后退”按钮后重新加载DataTables包装器的问题将不再存在

请注意,我也在使用脚本

我希望这将帮助像我一样在谷歌上搜索/挣扎的其他人

涡轮链接是伟大的速度。。。但这让加载JavaScript变得很痛苦

$(document).on 'turbolinks:load', ->
  tableElementIds = [
    '### TABLE ID HERE ###'
  ]
  i = 0
  while i < tableElementIds.length
    tableElementId = tableElementIds[i]
    if $.isEmptyObject($.find(tableElementId))
      i++
      continue
    table = undefined
    if $.fn.DataTable.isDataTable(tableElementId)
      table = $(tableElementId).DataTable()
    else
      table = $(tableElementId).DataTable(### OPTIONS HERE ###)

    document.addEventListener 'turbolinks:before-cache', ->
      table.destroy()
      return

    i++

  return
$(文档)。在“TurboLink:load”上,->
TableElementId=[
“#########”
]
i=0
而我
表.销毁()
返回
我++
返回

如果其他人有这个问题,我似乎找到了一种方法,至少可以通过在包含链接的div上应用html标记“data no turbolink”来防止turbolinks妨碍单个链接。只要页面上有数据表,就可以以某种方式禁用turbolinks,但由于我的应用程序仍然很小,所以现在这似乎有点复杂。我能够成功地解决turbolinks问题,而不必求助于数据无turbolinks。请参阅下面的解决方案。