2012-12-17 183 views
3

我需要得到我的手在現有的數據表的fnRowCallback設置,但我嘗試的一切似乎失敗。jquery datatables,初始化後更改rowcallback

有什麼我想:

1:

var dt = $('#table').dataTable({ 
      "bRetrieve": true, 
      "fnRowCallback" : function (nRow, aData, iDisplayIndex, iDisplayIndexFull) { 
      console.warn("working"); 
      } 
     ); 

2:

var dt = $('#table').dataTable({"bRetrieve": true}); 

dt.fnSettings().fnRowCallback = function (nRow, aData, iDisplayIndex, iDisplayIndexFull) { 
     console.warn("working"); 
    } 

沒有運氣,但如果我改變

var dt = $('#table').dataTable({"bRetrieve": true}); 
dt.fnSettings().sAjaxSource = "invalid url"; 

我得到一個錯誤,以便這似乎工作。另外,如果我在原始數據表初始化中執行fnRowCallback,它就可以工作,但這不是我想要的。

回答

5

我刪除了舊的答案,因爲我實在不明白您的文章(這是遲到了!)

好像你要麼必須使用非官方API,或破壞舊錶,並重新初始化它。

非官方API方式(未來版本可能無法使用),經過測試; DataTable中1.9.2

$("#table").dataTable().fnSettings().aoDrawCallback.push({ 
    "fn": function (oSettings) { 
     if (oSettings.aiDisplay.length == 0) { 
      return; 
     } 

     var nTrs = $('#table tbody tr'); 
     var iColspan = nTrs[0].getElementsByTagName('td').length; 
     var sLastGroup = ""; 
     for (var i=0 ; i<nTrs.length ; i++) { 

      var iDisplayIndex = oSettings._iDisplayStart + i; 
      data = oSettings.aoData[ oSettings.aiDisplay[iDisplayIndex] ]._aData; 


      // Now you can access things like 
      if (data.percentage > 80) { 
       // And access the rows like this 
       $(nTrs[i]).addClass("highlight-green"); 
      } 

     } 
    }, 
}); 

正確的方式工作:保存舊的設置,破壞,重新初始化

var oTable = $('#table').dataTable(); 

var oldoptions = oTable.fnSettings(); 

var newoptions = $.extend(oldoptions, { 
    fnRowCallback: function(nRow, aData, iDisplayIndex, iDisplayIndexFull) { 
    console.warn("working"); 
    } 
}) 

oTable.fnDestroy(); 

$('#table').dataTable(newoptions); 

參考:http://datatables.net/forums/discussion/2737/addchange-callback-after-initialization-or-else-clone-settings-to-re-build-table/p1

+0

非常感謝,我測試了這一點,一旦我2013年回去工作:)節日快樂 –

+3

你也可以在新的init設置中添加'「bDestroy」:true'選項,而不是調用'fnDestroy()' –

+0

@RoyLing爲什麼在使用'push'而不是'='時使用第一種方式設置aoDrawCallback? –