jquery – 如何将自定义参数传递给dataTables footerCallback

我想在jQuery dataTables中为footerCallback添加一个自定义参数.

这是我的代码的一部分:

oTableClient = $('#tbl_client').DataTable({
    "footerCallback": function(){
      dataTableFooterCallback('client');
     }
});
function dataTableFooterCallback(type, row, data, start, end, display) {
    var api = this.api(), data;

    if (type == 'client') {
        data = api.column(6, {page: 'current'}).data();
    } else {
        data = api.column(5, {page: 'current'}).data();
    }
}

但得到一个错误,

TypeError: this.api is not a function
var api = this.api(), data;

我哪里错了?

最佳答案 您正尝试访问不存在的dataTable API.每个dataTable方法或回调都返回一个API或通过此上下文可访问的API,但如果要在自己的函数中操作this.api(),则必须自己传递它.您可以通过使用
apply()调用dataTableFooterCallback()来执行此操作:

footerCallback: function() {
  dataTableFooterCallback.apply(this, arguments)
}

现在您已将此传递给dataTableFooterCallback并可以访问API:

function dataTableFooterCallback(type, row, data, start, end, display) {
  //get first row trough the API
  console.log(this.api().row(0).data())
  //rest of passed arguments same as footerCallback()
  console.log(arguments)
}

演示 – > http://jsfiddle.net/95h3a8nw/

向参数添加额外的变量有点棘手,因为参数不是真正的数组,它没有原型方法,如push().此解决方法将起作用:

footerCallback: function() {
  var newArguments = Array.prototype.slice.call(arguments)
  newArguments.push('client')
  dataTableFooterCallback.apply(this, newArguments)
}

在dataTableFooterCallback()中,’client’现在被添加为函数调用中的最后一个参数.查看更新的小提琴 – > http://jsfiddle.net/95h3a8nw/1/

点赞