dataTables - как сделать все столбцы настраиваемыми в 'draw.dt' - PullRequest
0 голосов
/ 24 мая 2018

У меня есть набор данных, который извлекается в dataTable через Ajax, и есть задержка по времени, которая означает, что пользователь может выполнить действия до его загрузки.Я должен загрузить этот набор данных одновременно, поэтому я не могу использовать серверную обработку, чтобы на этот раз обрабатывать его кусками.

Я использую на нем кнопки dataTables для загрузки xls, которые я отключаю донабор данных прибывает, а затем снова включается.Если бы я не сделал этого, пользователь мог бы загрузить пустую электронную таблицу до завершения запроса ajax.Итак, для кнопок я закодировал это так:

buttons: [
        {
            extend: 'excel',
            text: '<i class="fa fa-file-excel-o"></i>',
            titleAttr: 'Download to Excel',
            enabled: false
        },
    ],

затем:

table.on( 'draw.dt', function () {
    table.buttons().enable();
});

Мне нужно сделать то же самое с упорядочиваемыми столбцами, потому что, если щелкаются упорядочиваемые столбцыдо загрузки данных отображаемое сообщение меняется с «Загрузка» на «Нет данных в таблице» (понятно), но это не очень удобно для пользователя.

Я устанавливаю каждый столбец как orderable: falseкак это:

columns: [
        {
            data: 'myData', 
            orderable: false, // all columns are set to false like this
        },

Это работает, он устанавливает все столбцы, поэтому их нельзя упорядочить.Чего я не могу сделать, так это сделать их все по порядку после загрузки данных.

Я надеялся, что это возможно, что-то вроде этого, но я пытаюсь / ничего не буду работать:

table.on( 'draw.dt', function () {
    table.columns().orderable().enable();
});

Есть идеи?Если мне нужно включить каждый столбец отдельно, то это тоже нормально, я тоже не могу найти способ сделать это.

Заранее спасибо.

1 Ответ

0 голосов
/ 25 мая 2018

Причина, по которой установка orderable: false во время инициализации, а затем изменение ее с помощью table.columns().orderable().enable(); не будет работать, заключается в том, что orderable: false является опцией инициализации .Благодаря тому, что DataTables работает, вы не можете изменять параметры инициализации после завершения инициализации .Это означает, что вам нужно найти какой-то другой способ отключения упорядочения во время загрузки данных.

Лично, если это только начальная загрузка, я просто скрыл бы таблицу с style="display: none;", пока вы не сможете вызвать initCompleteОбратный звонок, затем просто позвоните $(...).show();.Если вы не хотите просто скрывать всю таблицу, вы можете выборочно скрыть заголовки (возможно, $.("#table thead").hide();) и показать их после загрузки.

С сайтом, который я разрабатываю, у нас есть аналогичныйСитуация, когда загружается около 50 тысяч строк одновременно.Я использую $. BlockUI () , чтобы поместить настраиваемый блокировщик всплывающих окон над таблицей во время выполнения вызова ajax.Я думаю, что это решение имеет лучший пользовательский интерфейс.Вы можете использовать $.blockUI() для выборочного применения модального блокирования к таблице с пользовательским сообщением о загрузке.

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