2016-07-06 2 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 메소드 또는 콜백은 this 컨텍스트를 통해 액세스 할 수있는 API 또는 API를 반환하지만 사용자 고유의 기능으로 this.api()에서 작동하려는 경우 직접 전달해야합니다. 당신은 호출하여 그렇게 할 수있는 dataTableFooterCallback()apply()과 :

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

당신이 dataTableFooterCallbackthis을 통과하고, 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/


에 추가 변수 추가은 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

위대한 답변이었습니다. 감사..! 이제 질문이 하나 더 있습니다. 인수를 사용하여 'client'를 전달하려면 어떻게해야합니까? –

+0

정말 대단 하시군. 그것은 일했다 ..! –

관련 문제