我正在使用DataTables创建表。初始化表格后,我想更改一些设置来控制如何呈现列之一,如下所示:

var st = mytable.dataTable().fnSettings();

$.extend(st.aoColumns[2], {
    "mRender": function (val, type, row) {
        return "xxx";
    }
});


但是,当我加载页面时,我得到:
“对象不是DataTables.js:181内部的函数(下面用“这是错误行”标记):

/* Cache the data get and set functions for speed */
var mRender = oCol.mRender ? _fnGetObjectDataFn( oCol.mRender ) : null;
var mData = _fnGetObjectDataFn( oCol.mData );

oCol.fnGetData = function (oData, sSpecific) {
    var innerData = mData( oData, sSpecific );

    if ( oCol.mRender && (sSpecific && sSpecific !== '') ) {
        return mRender( innerData, sSpecific, oData ); <== this is the error line
    }
    return innerData;
};


似乎某些缓存机制假设在初始化后mRender值将不会更改,但实际上DataTables允许通过fnSettings方法进行外部设置操作,该方法显式记录了它用于“外部操作”。

有关如何解决此问题的任何想法?

最佳答案

确定找到了解决方案-使用aoColumnDefs代替aoColumns,并在aTargets数组中指定列目标:

var aoColumnDefs = [{
    "mRender": function (val, type, row) {
        return "xxx";
    },
    "aTargets":[2]
}];
mytable.dataTable({aoColumnDefs:aoColumnDefs});

10-06 14:02