0

localStorage ではなくデータベースから状態を取得する ajax コールバックを使用して DataTable の状態を保存する実装に問題があります。一度正しい値console.logを取得すると。stateLoadCallbackしかし、私が2console.logstateSaveCallback取得する場合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 保存コールバックが呼び出されることはありません。なぜこれが起こっているのか理解できません。

4

0 に答える 0