【问题标题】:jQuery DataTables: How can I explicitly set the table instance name / table ID to use with state saving?jQuery DataTables:如何显式设置表实例名称/表 ID 以用于状态保存?
【发布时间】:2017-07-05 13:42:09
【问题描述】:

背景:

我将 DataTables 与一个名为“Turbolinks”的 JS 库结合使用,它基本上将您的应用程序转变为单页应用程序 (SPA),而无需使用真正的客户端框架的所有开销。它对 Ruby on Rails 应用程序的性能非常有用。

虽然它引入了一些令人头疼的问题 - 一个是与 DataTables 的兼容性。通过基本上破坏 Turbolinks 导航上的任何 DataTable,然后在 turbolinks 页面加载时重新初始化它,我已经让它工作得很好。这种方法效果很好,并且似乎是让 DataTables 与 Turbolinks 一起工作的最佳实践的全面接受的答案。

问题:

我试图添加到我的一些应用程序的最后一个功能/最后润色是 DataTable 状态保存。我面临的问题是,每次在页面导航上销毁/重新初始化表格时,...我实际上不太确定该怎么称呼它,但从检查设置对象上看起来stateSaveCallback - 它看起来像是 sInstance 和/或 sTableId

DataTables_Table_0

然后将 localStorage 键设置为:

DataTables_DataTables_Table_0_/current_path: "{data: data}"

current_path 是您当前所在的路径/页面。

然后当它在返回页面时重新初始化时,它被设置为DataTables_Table_1,依此类推——因此状态永远不会被正确加载。

有没有办法覆盖该 ID(或以某种方式在 stateSaveCallback / stateLoadCallback 中设置它的名称),这样它就不会增加最后的“0”、“1”等结束了吗?这样当表重新初始化时,它会从 DataTables_Table/current_path 中提取保存的状态?

【问题讨论】:

    标签: datatables local-storage turbolinks session-storage


    【解决方案1】:

    答案是简单地给表一个ID!然后 DataTables 不会为它分配自己的 ID 和递增的数字,并且 saveState 选项就可以工作。

    此外,在 AJAX 表的情况下,destroy/re-init 实际上会导致服务器被命中两次。

    更好的方法是禁用任何带有数据表的索引页面的 turbolinks 缓存。如果没有,您最终会在只需要一个时向服务器发出两个请求。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2010-09-14
      • 1970-01-01
      • 2013-04-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多