我的datatable初始化得很好,除了一些列需要很长时间(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
和其他几个。我注意到的是,表的绘制基本上是即时的,但是排序的实际完成是在这之后。但是,我不知道如何将事件绑定到正在完成的排序上,或者数据表是否有办法处理这个问题。有什么建议吗?
1条答案
按热度按时间cwtwac6a1#
我想你会想听听订单事件。
order事件-当表中包含的数据被排序时触发。你可以在这里找到更多的信息https://datatables.net/reference/event/。你可以在这里阅读更多关于如何监听数据表事件的信息:https://datatables.net/manual/events
编辑
我重新阅读了你的问题,意识到我可能对你需要使用的特定事件是错误的。如果你说你想在一个列被重新排序时触发一个操作(这实际上是我认为你想要的),你会想看看column-reorder(列已经被最终用户或API重新排序)。信息在同一个链接上。