#javascript #jquery #datatables
#javascript #jquery #таблицы данных
Вопрос:
Я только начинаю с js и разработал этот код для DataTable
$(document).ready(function() {
var table = $('#T_coin_list').DataTable({
dom: 'Blfrtip',
iDisplayLength: 100,
lengthMenu: [
[50, 100, -1],
[50, 100, "All"]
],
order: [
[4, "desc"]
],
buttons: [
'copyHtml5',
'excelHtml5',
'csvHtml5',
'pdfHtml5'
],
columnDefs: [{
targets: [0, 1],
className: 'dt-head-left'
},
{
targets: [2, 3, 4, 5, 6, 7, 8],
className: 'dt-head-center'
},
{
targets: [2, 3],
className: 'dt-body-center'
},
{
targets: 0,
data: "Logo",
render: function(data, type, row) {
return '<img src="' data '" height="30" width="30" />';
}
},
{
width: "3%",
targets: 0
},
{
width: "15%",
targets: 1
},
{
width: "7%",
targets: 2
},
{
width: "10%",
targets: [3, 4, 5, 6, 7, 8]
},
{
targets: 0,
searchable: false,
orderable: false
},
{
type: "natural",
targets: [3, 4, 5, 6, 7, 8]
}
]
});
$(table.column(0).header()).text('');
function replaceNans(item, index) {
table.column(item).nodes().each(function(node, index, dt) {
if (table.cell(node).data() == 'nan') {
table.cell(node).data('---------------');
}
});
}
var numbers = [4, 5, 6, 7, 8];
numbers.forEach(replaceNans)
$($.fn.dataTable.tables(true)).DataTable()
.columns.adjust();
});
Это работает хорошо, но дело в том, что при открытии страницы таблица данных отображается как необработанная без рендеринга / форматирования. Например, для столбца логотипа, для которого я определяю рендеринг как:
{
targets: 0,
data: "Logo",
render: function(data, type, row) {
return '<img src="' data '" height="30" width="30" />'; }
},
когда страница открывается, она по-прежнему показывает текст url в каждой ячейке, а не уже отрисованные изображения. Как я могу сделать так, чтобы таблица отображалась только после завершения выполнения всего js-кода для рендеринга / форматирования?
Комментарии:
1. Как генерируется начальная таблица? Разве вы не можете вставить
<img>
теги тогда?2. datatables.net/reference/option/initComplete
3. @charlietfl данные поступают в простой HTML из Python, а затем помещаются в DataTable
4. Итак, единственная проблема с изображениями? Если вы поместите их
<img>
в исходный код html, они будут загружаться намного быстрее, поскольку js не нужно запускать для выполнения запросов5. Обратный вызов InitComplete, связанный выше, может использоваться для скрытия индикатора загрузки и отображения таблицы
Ответ №1:
Можно увидеть ту же проблему и в их реальных примерах. Одним из способов может быть скрытие таблицы при начальной загрузке самого html, как показано ниже,
<table id="T_coin_list" style="display:none" border="0" class="display cell-border nowrap compact">
И показать прогресс в fnPreDrawCallback показать прогресс и скрыть его после завершения инициализации, а также показать фактическую таблицу для самого этого события для лучшего восприятия.
"fnPreDrawCallback":function(){
$("#progress").show();
//alert("Pre Draw");
},
"fnInitComplete":function(){
$("#T_coin_list").show();
$("#progress").hide();
//alert("Completed");
}
Надеюсь, это поможет.
Ответ №2:
вы можете скрыть использование
$("#T_coin_list").hide();
когда вы его отрисовываете. Или скрыть это другим способом.
затем
$("#T_coin_list").show();
после отрисовки изображений