サーバーからコンテンツをロードする Web ページで DataTables を使用していますServer-side processingに、rowReordering jquery-datatables-row-reordering機能を追加したいと考えています。以前やってみた方法です。
$('.data_table').dataTable( {
"sPaginationType": "bootstrap",
"oLanguage": {
"sLengthMenu": "Display <select>'+'<option value=\"10\">10</option>'+'<option value=\"20\">20</option>'+'<option value=\"30\">30</option>'+'<option value=\"40\">40</option>'+'<option value=\"50\">50</option>'+'<option value=\"-1\">All</option>'+'</select> records"
},
"processing": true,
"serverSide": true,
"ajax": dataUrl
} ).rowReordering({
sURL:sortUrl, // Let the server page know if order is changed
sRequestType: "GET",
fnAlert: function(message) {
modalError("Server Error",message,null); // Error message if an server error occured during the process
}
});
$.extend( $.fn.dataTableExt.oStdClasses, {
"sWrapper": "dataTables_wrapper form-inline"
} );
これにより、実際にはデータのドラッグ アンド ドロップが可能になりますが、それを行った後にサーバー通知は送信されず、ドロップされた行はドロップされた場所に留まります (以前の場所に戻ります)。
以下もやってみました。
$table = $('.data_table').dataTable( {
"sPaginationType": "bootstrap",
"oLanguage": {
"sLengthMenu": "Display <select>'+'<option value=\"10\">10</option>'+'<option value=\"20\">20</option>'+'<option value=\"30\">30</option>'+'<option value=\"40\">40</option>'+'<option value=\"50\">50</option>'+'<option value=\"-1\">All</option>'+'</select> records"
},
"processing": true,
"serverSide": true,
"ajax": dataUrl,
"fnInitComplete": function(oSettings, json) {
$table.rowReordering({
sURL:sortUrl, // Let the server page know if order is changed
sRequestType: "GET",
fnAlert: function(message) {
modalError("Server Error",message,null); // Error message if an server error occurred during the process
}
});
}
} );
$.extend( $.fn.dataTableExt.oStdClasses, {
"sWrapper": "dataTables_wrapper form-inline"
} );
これでは、コールバックrowRedordering
内で呼び出していfnInitComplete
ます。しかし、これは前のものと同じ結果をもたらします。ドラッグアンドドロップを行いますが、サーバー通知を送信しません(また、行はドロップされた場所に残りません。以前の場所に戻ります)。
サーバー側で処理されたデータを追加してテーブルを初期化する前に、並べ替えは完全に機能しました。それで、私はここで何が間違っていますか?