我初始化我的数据表只是很好,除了我的一些列需要很长时间(3-5秒)进行排序的一切功能。我只有大约350行,但大约25列(不是一次都可见)。datatables排序完成时触发事件
我正在做这样的事情,使列可见,然后排序。
$('#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
和其他几个人尝试过。我注意到的是,表格绘制基本上是瞬时的,但实际完成的排序是在此之后。但是,我不知道如何将事件绑定到正在完成的排序上,或者如果数据表有办法处理这种情况。有什么建议么?
如果你已经有了默认的排序工作,你可能通过自己调用'draw()'来与它冲突。当你评论上述内容时,速度是否正常? – charlietfl
你可以使用'processing:true'吗? –
@ Gyrocode.com这似乎没有什么区别。 – jonmrich