有人知道或有一个想法如何重新加载页面内多个DataTable的内容吗?
这是我到目前为止用来初始化DataTable的代码:

$('.notifications_list_table').dataTable( {
    "aaSorting": [[ 0,"desc" ]],
    "sPaginationType": "full_numbers",
    "aoColumns": [null,null],
    "bLengthChange": false
});


如您所见,我使用一个类来标识和初始化所有DataTable。现在,当服务器上至少一项内容更改时,我想全部更新它们。

我该怎么办?我看到fnAjaxReload可用于在一个DataTable中加载数据,但是在这里,我想在一个ajax调用中获得多个“ aaData” ...

最佳答案

因此,除非您使用长轮询或websocket,否则客户端不会知道服务器端的更改。但是,您始终可以按设定的时间间隔进行更新。对于较长的时间间隔,请求的“费用”微不足道。在很短的时间间隔(每秒或任何一次)中,它成为更多的讨论点。

尽管DataTables站点上有一些简化的示例,但我认为将初始化对象存储到变量中是一种好习惯:

var notificationTables = $('.notifications_list_table').dataTable( {
    /* initialization parameters */
});


现在,只需在对象上调用正确的函数即可更新表。我正在使用服务器端处理,因此我像这样重新绘制:

notificationTables.fnDraw(false);


示例代码所缺少的是如何获取数据。您提供的代码段假定数据已经在DOM中。因此,我上面提供的代码实际上不会做任何事情来获取新数据。

在我的应用程序中,我这样做(如果不是最佳方法,我很高兴有人能向我展示更好的东西!在这里不感到骄傲!):


我创建了一个包含所有表使用的参数的初始化对象。
我为具有自定义值(例如,数据源URL,列标签,fnRowCallback函数等)的每个单独的表创建一个单独的新对象,并使用jQuery.extend()将其连接到基础对象,从而产生一个新的完整对象必需的参数。
像这样初始化:var tableOne = $('#tableOne').dataTable(tableOneParams);(等;每个表一个)。
我只是单独调用更新。我的方法稍微复杂一点,因为它具有一些具有暂停/恢复和空闲检测功能的轮询机制,但实际上可以归结为一个类似的版本:


var getNewDT = function() {
  tableOne.fnDraw(false);
  tableTwo.fnDraw(false);
};


然后,当我需要更新它们时,只需调用getNewDT()即可。

希望有帮助。 ;-)

关于javascript - 重新加载多个数据表的内容,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/9912618/

10-09 17:37
查看更多