我正在初始化我的数据表,一切正常,除了我的某些列需要很长时间(3-5 秒)进行排序。我只有大约 350 行,但大约有 25 列(并非一次全部可见)。
我正在做类似的事情来使列可见,然后排序。
$('#main_index').on('click', 'thead th', function() {
var idx = table.column(this).index();
selected_data = table.column(idx).dataSrc();
if (selected_data == 'diabetes_full') {
table.order([4, 'desc']);
table.columns('.col_rank').visible(false);
table.column(3).visible(true);
table.draw();
$(".rank").hide();
$("#diabetes_full_rank").show();
} else if (selected_data == 'pop_with_diabetes') {
table.order([6, 'desc']);
table.columns('.col_rank').visible(false);
table.column(5).visible(true);
table.draw();
$(".rank").hide();
$("#pop_with_diabetes_rank").show();
}
});
就像我说的,这可行,但有时有点慢。我不确定我能找到一种方法来加快速度(欢迎提出建议),但我希望能够在排序仍在进行时显示加载消息,并在排序完成时隐藏它。
我尝试过各种方法
table.draw()
包括:
$.when(table.draw()).then(//function to hide loading message);
我尝试过使用
drawCallback
和其他几个。我注意到的是,表格绘制基本上是瞬时的,但排序的实际完成是在此之后。但是,我不知道如何将事件绑定到完成的排序,或者数据表是否有办法处理这个问题。有什么建议吗?
我想你会想听听订单事件。
order 事件 - 当表中包含的数据被排序时触发。
您可以在这里找到更多信息https://datatables.net/reference/event/。
您可以在此处阅读有关如何监听数据表事件的更多信息:https://datatables.net/manual/events
编辑
我重新阅读了您的问题,并意识到我对您需要使用的具体事件可能是错误的。如果您说要在对列重新排序后触发操作(这实际上是我认为您想要的),您将需要查看列重新排序(列已由最终用户或 API 重新排序)。信息位于同一链接上。