タスク:テーブル行のリンクから ajax を使用して db のレコードを削除し、(awesome :) DataTables jQuery プラグイン ( link )でフィルター、並べ替え、ページネーションを維持します。
現在のページの最後のアイテムが正常に削除された場合、「一致するレコードが見つかりませんでした」という種類のメッセージや「10 行中 11 ~ 10 行を表示しています」のようなばかげたページ付け情報を表示する代わりに、ページ付けを元に戻したいと思います。
タスク:テーブル行のリンクから ajax を使用して db のレコードを削除し、(awesome :) DataTables jQuery プラグイン ( link )でフィルター、並べ替え、ページネーションを維持します。
現在のページの最後のアイテムが正常に削除された場合、「一致するレコードが見つかりませんでした」という種類のメッセージや「10 行中 11 ~ 10 行を表示しています」のようなばかげたページ付け情報を表示する代わりに、ページ付けを元に戻したいと思います。
サーバー側のデータ、フィルタリング、ページネーションが行われた状態で、DataTables の準備が整った段階から始めます。
手順:
iDisplayStart
現在のページの行の開始 ( ) と、現在表示されている行の数( ) を取得しますiDisplayLength
。それらの差が >= 0 の場合、小さなプラグインを使用してテーブルを再描画するか (ajax 呼び出し)、行の単純なローカル削除を行います。コード:
// delete user
$("a.deleteUser").live("click", function(e){
e.preventDefault();
var isDelete = confirm("Delete sub-user? This cannot be undone.");
if (isDelete == true){
var uid = $(this).attr('uid');
var i = $(this).attr('i');
$.ajax({
url: baseUrl + 'user/delete?uid=' + uid,
dataType:'json',
beforeSend: function() {
listTable.fnProcessingIndicator();
},
success: function(response){
if (response == 'SUCCESS'){
var rowsOnThisPageBeforeDelete = listTable.fnGetData().length;
if (rowsOnThisPageBeforeDelete == 1){
var numberOfRowsOnPage = listTable.fnSettings()._iDisplayLength;
var startOfRows = listTable.fnSettings()._iDisplayStart;
var newStartOfRows = startOfRows - numberOfRowsOnPage;
if (newStartOfRows >= 0){
listTable.fnDisplayStart(newStartOfRows);
}
else{
listTable.fnDeleteRow(i);
}
}
else{
listTable.fnDeleteRow(i);
}
}
else{
alert('Could not delete user. Try again later.');
}
},
error: function(){
alert('Could not delete user. Try again later.');
},
complete: function() {
listTable.fnProcessingIndicator(false);
},
});
}
});
必要なプラグインはhttp://datatables.net/plug-ins/api#fnDisplayStartです。プラグインを初めて使用する場合は、DataTables でプラグインを使用する方法について、いくつかの調査を行ってください (リンクの手順も参照してください)。
$.fn.dataTableExt.oApi.fnDisplayStart = function ( oSettings, iStart, bRedraw )
{
if ( typeof bRedraw == 'undefined' )
{
bRedraw = true;
}
oSettings._iDisplayStart = iStart;
oSettings.oApi._fnCalculateEnd( oSettings );
if ( bRedraw )
{
oSettings.oApi._fnDraw( oSettings );
}
};
// sample use:
/*
oTable.fnDisplayStart( 10 );
*/
参考文献: