2016-07-06 6 views
4

jQuery dataTablesのfooterCallbackにカスタム引数を追加します。カスタム引数を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;

答えて

1

thisのdataTable APIにアクセスしようとしています(存在しない場合)。すべてのdataTableメソッドまたはコールバックは、APIまたはthisコンテキストでアクセス可能なAPIを返しますが、自分の関数でthis.api()を操作する場合は、それを渡す必要があります。

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

今あなたがdataTableFooterCallbackthisを渡され、APIへのアクセスを持っています: - >http://jsfiddle.net/95h3a8nw/


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) 
} 

デモあなたはそれをapply()dataTableFooterCallback()を呼び出すことによって行うことができます

に余分な変数を追加するargumentsは実際の配列ではないので、少し難解です。push()のようなプロトタイプメソッドはありません。

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

'client'dataTableFooterCallback()では今、関数呼び出しの最後のparamとして追加されます。この回避策が動作します。更新されたフィドルを参照 - >http://jsfiddle.net/95h3a8nw/1/

+0

これは素晴らしい答えでした。ありがとう..! もう1つ質問します。もし引数で ''client''を渡したいのであれば、どうしたらいいですか? –

+0

Thnakあなたは大変です。出来た..! –

関連する問題