【问题标题】:Datatables 1.10 enable pagination without recordsTotalDatatables 1.10 启用不带记录的分页
【发布时间】:2020-05-13 06:43:38
【问题描述】:

我最近从 1.9 迁移到 1.10,并且针对 ajax 请求更改了分页行为。

在 1.9 中,我无法通过 iTotalDisplayRecordsiTotalRecords,只要我将 sEcho 发回,分页仍然可用。

这似乎在 1.10 中不再有效,只要我不发送 recordsTotal 值,分页就会保持禁用状态。

我有一些表在 db 中包含 500k+ 行,将它们全部计数以生成 recordsTotal 可能会很昂贵,特别是如果我需要在每次页面更改时都这样做。

我可以建立一个缓存机制,这也不是完美的解决方案,因为我第一次仍然需要根据我的数据库计算这些行,这可能需要一些时间并产生更慢的体验。

我是否缺少任何其他解决方案来保持分页可用而不计算 db 中的所有行?

谢谢。

【问题讨论】:

    标签: datatables datatables-1.10


    【解决方案1】:

    您可以自定义分页信息消息。

    例子:

    $('#example').DataTable({
      "language": {
        "info": "Showing entries _START_ to _END_"
      }
    });
    

    相关文档请参见here

    您可能还需要调整这部分消息:

    "infoFiltered": "(filtered from _MAX_ total entries)"
    

    执行此操作后,您将不再需要计算总行数,因为该信息永远不会显示。

    【讨论】:

    • 感谢您的建议,但我已经禁用了信息部分并且不显示计数,但是,如果我不发送 redordsTotal 值,分页按钮仍然被禁用我的 Ajax 回调。
    • 好的 - 明白了。假设您有 500,000 条数据库记录,但您一次只向客户端发送 100 条记录,那么页码的预期结果是什么(显示“Previous 1 2 3 ... n Next”的部分)。应该显示什么值“n”来表示最大页码?
    • 另外,如果有帮助 - 我测试了一个服务器端 DataTable,其 recordsTotal 值硬编码为 -1(然后我隐藏了 "infoFiltered" 消息)。分页按钮工作正常(它们未停用)。但是你仍然有你需要“最大页码”的问题。在某些时候,我假设您必须重新计算数据库记录(可能在单独的过程中)以确保用户可以到达正确的“最终页面”。
    • 我也用 -1 值进行了测试,但是 First/Prev/Next/Last 按钮被禁用,只有页码被启用。我想出克服这个问题的唯一方法是做一个黑客来返回类似的东西:count(items) > pageLength : count(items) * start + pageLength : count(items) * start 并希望最好,但是是的,它并不完全完美......如果没有本机解决这个问题,那么我想我需要创建一个缓存机制来计算总记录并存储值。
    猜你喜欢
    • 1970-01-01
    • 2015-09-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-09-30
    • 2017-04-08
    • 2014-06-06
    相关资源
    最近更新 更多