2016-03-01 212 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