我想在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/