2016-09-19 2 views
0

У меня есть несколько вариантов для моего JQuery datatable, который очистит DataTable и загрузит новые данные через WebSockets. Поэтому я очищаю содержимое таблицы с помощью fnClearTable(), и через несколько мгновений я получаю новые данные через свой WebSocket.Показать загрузку gif, когда DataTable был очищен

Это может продолжаться до нескольких секунд, и пока я хочу отображать загрузочное изображение в своем DataTable. Как я могу это достичь?

Мой обработчик события, который очищает DataTable:

/* On Daterange change (e.g. Last 3 Days instead of Last 24h) */ 

    $('#profitList_dateRange').change(function() { 
     var dateRangeHours = $("#profitList_dateRange").val(); 
     var jsonParamObject = JSON.parse(dateRangeHours); 

     // Clear table 
     var profitList = $('#profitList').dataTable(); 
     profitList.fnClearTable(); // Now I want to show the loading image! 
     socket.emit('load-statistics', (jsonParamObject)); 
    }); 
+0

Что делать, если вы имели GIF на странице скрытой. Затем, как только функция изменения будет запущена, покажите ее, и как только функция очистки будет завершена, снова скройте gif с помощью обратного вызова. –

ответ

1

Один из способов ее достижения, если у вас есть 2 дивы (я предполагаю, что ваши дивы правильно стиле с содержанием внутри них):

<div id="profitList"> your table content </div> 
<div id="profitListLoading"> show loading here </div> 

Тогда в обработчике:

$('#profitList_dateRange').change(function() { 
     var dateRangeHours = $("#profitList_dateRange").val(); 
     var jsonParamObject = JSON.parse(dateRangeHours); 

     // Clear table 
     var profitList = $('#profitList').dataTable(); 
     profitList.fnClearTable(); // Now I want to show the loading image! 
     $('#profitList').hide(); 
     $('#profitListLoading').show(); 
     socket.emit('load-statistics', (jsonParamObject)); 
    }); 

При обработке загруженных данных вы должны cc. Отмените изменения

 $('#profitList').show(); 
     $('#profitListLoading').hide(); 
+1

Я не думаю, что это хороший способ сделать это, поскольку это не использует функцию DT для «обработки» div, это означает, что вам придется беспокоиться о стилизации div, позиционировании его в нужном месте и убедиться это отзывчиво (если вам это интересно) Использование опции 'processing' будет лучше IMO –

+0

Я согласен. Я не знал об этой функции и предлагал общее решение. –

1

Убедитесь, что у вас есть processing: true

$('#example').dataTable({ 
    processing: true 
}); 

Затем добавить:

$('.dataTables_processing', $('#example').closest('.dataTables_wrapper')).show(); 

Если вы хотите добавить GIF изображение, которое вы можете изменить разметку следующим образом:

$('#example').dataTable({ 
    oLanguage: { 
    sProcessing: "<img src='https://d13yacurqjgara.cloudfront.net/users/12755/screenshots/1037374/hex-loader2.gif'>" 
    }, 
    processing: true 
}); 

ДЕМО: http://jsfiddle.net/0m6uo54t/2

обработка:

Включение или отключение отображения индикатора «обработки», когда таблица обрабатывается (например, сорт). Это особенно полезно для таблиц с большими объемами данных, где для сортировки записей может потребоваться значительное .

https://datatables.net/reference/option/processing

[UPDATE] bProcessing является вариантами наследия, новый код DT использует processing

+0

Что означает флаг bProcessing? –

+0

Посмотрите мое обновление, оно в основном позволяет отображать скрытие обработки div –

+0

Я пробовал этот подход, добавив эту строку '$ ('. DataTables_processing', $ ('# profitList'). Closeest ('. DataTables_wrapper')).show(); 'в обработчик события изменения после fnClearTable, но похоже, что он не работает. Я установил обработку в true при создании datatable. Поведение не изменилось (он говорит, что нет данных) после очистки таблицы вместо показа анимации загрузки. – kentor

Смежные вопросы