2016-03-01 210 views
0

我初始化我的数据表只是很好,除了我的一些列需要很长时间(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和其他几个人尝试过。我注意到的是,表格绘制基本上是瞬时的,但实际完成的排序是在此之后。但是,我不知道如何将事件绑定到正在完成的排序上,或者如果数据表有办法处理这种情况。有什么建议么?

+0

如果你已经有了默认的排序工作,你可能通过自己调用'draw()'来与它冲突。当你评论上述内容时,速度是否正常? – charlietfl

+0

你可以使用'processing:true'吗? –

+0

@ Gyrocode.com这似乎没有什么区别。 – jonmrich

回答

0

我想你会想要听命令事件。
订单事件 - 当订购表中包含的数据时触发。 你可以在这里找到更多信息https://datatables.net/reference/event/。 你可以阅读更多关于如何倾听这里的数据表事件:https://datatables.net/manual/events

编辑

我重读你的问题,并意识到,我可能是错的你将需要使用特定的事件。如果你说你想在列重新排序时触发一个动作(这实际上是我认为你想要的),你会想看看列重新排序(列已由最终用户或API重新排序)。信息在同一链接上。

+0

订单事件似乎在订单启动时触发,而不是在完成时触发(至少这是它对我的表格的作用方式)。 – jonmrich

+0

对不起,我认为我误读了第一个问题,我做了一个编辑, – SeanKelleyx