3

既存のデータテーブルのfnRowCallback設定を取得する必要がありますが、試行するすべてが失敗するようです。

私は何を試しましたか:

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を実行すると機能しますが、それは私が望んでいることではありません。

4

1 に答える 1

5

あなたの投稿が本当に理解できなかったので、古い回答を削除しました(遅れました!)

非公式のAPIを使用するか、古いテーブルを破棄して再初期化する必要があるようです。

非公式のAPI方法(将来のバージョンでは機能しない可能性があります)、テスト済み。dataTable1.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

于 2012-12-20T14:35:34.573 に答える