localStorage ではなくデータベースから状態を取得する ajax コールバックを使用して DataTable の状態を保存する実装に問題があります。一度正しい値console.log
を取得すると。stateLoadCallback
しかし、私が2console.log
回stateSaveCallback
取得する場合console.log
。以下はコードです:
var initDataTable = function (selector) {
$.when(App.availableViewsXhr).done(function () {
$.ajax({
url: "api/v1.0/views/" + App.activeView + "/metadata",
type: "GET"
})
.done(function (data) {
if (App.dataTable) {
App.dataTable.destroy();
$(selector).html('');
}
appendHeaderAndFooter(selector, data.columns);
var dom = "<'row'<'col-sm-7'AEOBF><'col-sm-5'f>>";
dom += "<'row'<'#notice.col-sm-12'>>";
dom += "<'row'<'col-sm-12'tr>>";
dom += "<'row' <'col-sm-12'lip>>";
App.dataTable = $(selector).DataTable({
"lengthMenu": [[25, 50, 100], ['25', '50', '100']],
"dom": dom,
"buttons": [
{
className: 'btn-sm',
extend: 'colvis',
columns: getHideableColumnNumbers(data.columns)
}
],
"stateSave": true,
"colReorder": {
"realtime": false,
"fixedColumnsLeft": data.config.colReorder.fixedColumnsLeft
},
"order": [[getFirstOrderableColumnNumber(data.columns), "desc"]],
"columns": getColumns(data.columns, data.config),
"serverSide": true,
"ajax": {
"url": 'api/v1.0/views/' + App.activeView,
"type": "POST",
"complete": function () {
App.dataTable.columns.adjust();
}
},
"scrollX": true,
stateSaveCallback: function (settings, data) {
console.log('save');
},
stateLoadCallback: function (settings) {
console.log('load');
}
});
});
});
};
これにより、不必要に 2 回 ajax 保存コールバックが呼び出されることはありません。なぜこれが起こっているのか理解できません。