简体   繁体   English

如何使用服务器端处理和Scroller扩展刷新DataTable

[英]How to refresh DataTable with server side processing and Scroller extension

I was tried to use these approaches: 我尝试使用以下方法:

  1. Using api().draw(false) function, but it resets scroll offset. 使用api()。draw(false)函数,但会重置滚动偏移量。
  2. Using api().ajax.reload(null, false). 使用api()。ajax.reload(null,false)。 It resets scroll offset too. 它也重置滚动偏移量。
  3. Using dataTable._fnDraw() function. 使用dataTable._fnDraw()函数。 It doesn't work too. 它也不起作用。 There is a bug when you are trying a bit scroll and after _fnDraw() call it scrolls to previous position. 当您尝试稍微滚动并在_fnDraw()调用后滚动到上一个位置时,会有一个错误。 When you are scrolling a lot - it works well. 当您滚动很多时-效果很好。

My TypeScript code: 我的TypeScript代码:

 var dataTableOptions = { serverSide: true, ordering: true, searching: true, columns: [ { "data": "id" }, { "data": "workflowId" }, { "data": "discovery" }, { "data": "title" }, { "data": "createdBy" }, { "data": "createDate" }, { "data": "status" } ], ajax: (data, callback, settings) => { // server side service call }, dom: 'rtiS', scrollY: 400, scroller: { rowHeight: 35, loadingIndicator: true }, initComplete: function () { forceRefresh = _.throttle(() => { //this.api().ajax.reload(false); this._fnDraw(); }, 1000); setInterval(() => { forceRefresh(); }, 5000); } } 

I didn't find any other way as get scrollTop of scroller before ajax call and after table refresh ( api().ajax.reload ) assign it again. 在ajax调用之前和表刷新后( api().ajax.reload )再次分配它,我没有找到其他任何方法来获取滚动器的scrollTop It's works for me. 对我有用。

Datatable automatically refresh (with updated data) on server side operation, no need to force refresh. Datatable在服务器端操作时自动刷新(使用更新的数据),无需强制刷新。

$(document).ready(function() {
  var dataTableOptions = {
      serverSide: true,
      ordering: true,
      searching: true,
      columns: [
        { "data": "id" },
        { "data": "workflowId" },
        { "data": "discovery" },
        { "data": "title" },
        { "data": "createdBy" },
        { "data": "createDate" },
        { "data": "status" }
      ],
      ajax: (data, callback, settings) => {
        // server side service call
      },
      dom: "frtiS",
      scrollY: 400,
      deferRender: true,
      scroller: {
        rowHeight: 35,
        loadingIndicator: true
      }
    }

A live example can be found here 一个现场的例子可以在这里找到

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM