【问题标题】:Jquery Datatables, change rowcallback after initialisationJquery Datatables,初始化后更改行回调
【发布时间】:2012-12-17 10:29:51
【问题描述】:

我需要掌握现有数据表的 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,它可以工作,但这不是我想要的。

【问题讨论】:

    标签: jquery datatables


    【解决方案1】:

    我删除了我的旧答案,因为我真的不明白你的帖子(太晚了!)

    看来您要么必须使用非官方 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

    【讨论】:

    • 非常感谢,我会在 2013 年重返工作岗位后进行测试 :) 节日快乐
    • 您也可以在新的初始化设置中添加"bDestroy": true 选项,而不是调用fnDestroy()
    • @RoyLing 为什么使用第一种方式设置aoDrawCallback时使用push而不是=
    • @YanYang 如果您阅读 DataTables 的文档,aoDrawCallback 实际上是一个具有fn 属性的对象数组,即。回调,也就是说,它就像是绘制事件的监听器。
    猜你喜欢
    • 1970-01-01
    • 2014-12-22
    • 2016-06-18
    • 2011-12-19
    • 1970-01-01
    • 2020-03-04
    • 1970-01-01
    • 2015-11-04
    • 2012-12-29
    相关资源
    最近更新 更多