我在一个新的Rails 4.2项目中使用jQuery DataTables。我有大量的结果需要根据组、项目和状态进行过滤。选择组会过滤项目选择,通过应用程序的往返,项目选择也会以同样的方式过滤表。我将组和项目保存保存在会话变量中,这样当用户更改页面时,然后点击主链接回来,它会记住他们的选择,并让他们回到他们在哪里。这一切的工作就像我打算它。
问题是,使用浏览器的 * 返回按钮 * 从不同的页面返回到表将导致DataTable周围的重复 Package (具有搜索框,项目数标签和分页链接)。
x1c 0d1x的数据
我添加了jquery-turbolinks gem。
我试过fiddling with event listeners,但我不能让这些想法工作。
我试着用data-turbolinks=false
使页面的主体不受Turbolinks的影响。
我试过将脚本中的事件改为$(document).ready()
以外的事件,比如page:load
,但它们都不能阻止这种情况。
我已经尝试在那个特定的页面(使用content_for :head
)中加载DataTable的所有脚本,这些脚本都是从Turbolinks中豁免的。
我发现的唯一可以防止这种 Package 器重复发生的方法是简单地从assets中完全删除包含turbolinks JS的调用。如果我不知道比我更聪明的人认为它应该是应用程序的一部分,我已经这样做了。我不知道该怎么做。我正在寻找优雅的方法来处理这个问题。
最新消息:四年后,我使用Rails 6.1,并且仍然广泛使用Ag-Grid。我想尝试Rails Hotwire的新热点,但它似乎是建立在Turbolinks上的。所以我又尝试了一次让Ag-Grid与Turbolinks很好地配合,它仍然有与DataTables相同的问题,我仍然找不到它的前进方向。
我从这个关于DataTables的页面中得到了一些小的进步,通过将data-turbolinks="false"
放在表的div中(而不是页面,就像我以前尝试的那样)。对于某些导航,这“工作”。“工作”,我的意思是它防止了复制表,但它仍然重新加载整个表。
我还发现了这个fascinating discussion关于Basecamp显然如何在Turbolinks存在的情况下处理该高速缓存,但它对Ag-Grid没有帮助。
我发现防止表元素重复的正确方法是使用document.addEventListener('DOMContentLoaded', function() {})
作为我的键。它似乎尊重使用链接或后退/前进按钮进行导航的所有不同情况,而不重复。然而,我丢失了表中超过屏幕上显示的任何行,整个表需要重新获取和显示数据,无论如何,所以这并不能解决任何问题
这就是这种情况继续吸引我和让我沮丧的部分。如果我不使用Tubolinks,这些JS表与浏览器导航按钮一起工作得很好。我可以向后和向前翻页,没有数据需要重新加载。如果我使用Turbolinks,并设法防止表元素的重复,我需要重新加载表中的数据。很明显,我被夹在两个不同的JS缓存中,4年后,我仍然不知道如何让它们很好地配合在一起。
2条答案
按热度按时间nxowjjhe1#
使用以下设置,我的表可以正常工作。
对于
datatable.js
或application.js
。字符串
为观之。
型
参考文献:
zzwlnbp82#
我只是简单地使用了这行代码,并在创建数据表之前为我
if($('#user_wrapper').length !== 0) return
工作得很好。因为浏览器中的来回不断地在 Package 器中添加 Package 器,我发布的代码检查 Package 器的长度,如果它不为零,它会从再次创建数据表中返回。