有人知道或有一个想法如何重新加载页面内多个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/