Установочные столбцы jQuery Datatables - PullRequest
0 голосов
/ 28 апреля 2020

Я знаю, что это уже спрашивали, но я все еще не могу разобраться. Из-за архитектуры приложения, у меня есть данные внутри модальных. Этот набор данных инициализируется один раз при загрузке страницы (без данных), помещается в модальное окно в DOM, которое скрыто, без ширины и высоты. Каждый раз, когда модальное окно открывается, базовые данные перезагружаются с помощью

$('#datatable').DataTable().ajax.reload()

. Проблема в том, что при открытии модального режима расположение столбцов не является правильным. Столбцы тонкие, и они не занимают все модальное пространство.

Я прочитал, что мне следует вызвать

$('#datatable').DataTable().columns.adjust();
$('#datatable').DataTable().responsive.recalc();

, чтобы изменить ширину столбцов, но ничего не происходит.

index. html

    <link href="/materialize.min.css" type="text/css" rel="stylesheet" media="screen,projection"/>
    <link href="/datatables.min.css" type="text/css" rel="stylesheet" media="screen,projection"/>

</head>

<body>

    <button id="button">Open</button>

    <div id="modal-bom" class="modal">
        <div class="modal-content">
            <table class="striped" id="table">
                <thead>
                    <tr>
                        <th>Position</th>
                        <th>Code</th>
                        <th>Description</th>
                        <th>Quantiy</th>
                    </tr>
                </thead>
            </table>
        </div>
    </div>

    <script src="/jquery-3.4.1.min.js"></script>
    <script src="/materialize.min.js"></script>
    <script src="/datatables.min.js"></script>
    <script src="/mainApp.js"></script>

</body>
</html>

mainApp. js

var initialized = false;

$(document).ready(() => {

    $('#button').click(() => {
        $('#modal-bom').modal({
            onOpenEnd: () => {
                $('#table').DataTable().ajax.reload(() => {
                    $('#table').DataTable().columns.adjust();
                    $('#table').DataTable().responsive.recalc();
                });
            },
        });
        $('#modal-bom').modal('open');
    });

    $('#table').DataTable({
        ajax: (dataToSend, callback) => {
            loadData().then((dataReceived) => {
                callback(dataReceived);
            });
        },
        columns: [
            { data: 'position' },
            { data: 'code' },
            { data: 'description' },
            { data: 'qty' }
        ],
        initComplete: () => initialized = true 
    });
});

function loadData() {
    return new Promise((resolve) => {
        if (!initialized) {
            resolve({ data: {} });
        }
        else {
            $.ajax({
                url: 'http://127.0.0.1:5500/data.txt',
                method: "GET",
                dataType: 'json',
                success: json => resolve({ data: json.data })
            });
        }
    });
}

data.txt

{"data": [
    {
        "level": 0,
        "position": "1",
        "code": "ART001",
        "description": "Article one description",
        "qty": "1"
    },
    {
        "level": 1,
        "position": "1.1",
        "code": "ART002",
        "description": "Article two description",
        "qty": "10"
    },
    {
        "level": 1,
        "position": "1.2",
        "code": "ART003",
        "description": "Article three description",
        "qty": "1"
    },
    {
        "level": 2,
        "position": "1.2.1",
        "code": "ART004",
        "description": "Article four description",
        "qty": "2"
    },
    {
        "level": 2,
        "position": "1.2.2",
        "code": "ART005",
        "description": "Article five description",
        "qty": "15"
    },
    {
        "level": 3,
        "position": "1.2.2.1",
        "code": "ART006",
        "description": "Article six description",
        "qty": "5"
    },
    {
        "level": 2,
        "position": "1.2.3",
        "code": "ART007",
        "description": "Article seven description",
        "qty": "4"
    },
    {
        "level": 1,
        "position": "1.3",
        "code": "ART008",
        "description": "Article eight description",
        "qty": "1"
    }
]}

Что еще мне следует попробовать ? Спасибо за любую помощь

1 Ответ

0 голосов
/ 03 мая 2020

Внутри вашего onOpenEnd , вместо

$('#table').DataTable().columns.adjust();

Попробуйте

$('#table1').DataTable().columns.adjust().draw();

Именно это позволило моим таблицам перерисовать его столбцы всякий раз, когда модальный открывается.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...