Вставка атрибутов пользовательских данных в JQuery DataTables
Проблема:
- Я использую JQuery DataTables v1.10 для проекта, связанного с работой.
- Для проекта требуется определение Datatable и его создание с помощью проанализированных данных JSON, переданных в качестве значений таблицы
-
Как только созданный datatable был создан, каждая ячейка в каждом столбце должна иметь событие щелчка, которое открывает всплывающее окно и передает список имен в JSON, полученный от конечной точки. Конечная точка изменяется в зависимости от того, какая ячейка таблицы нажата.
-
Я думаю, что после создания экземпляра данных мне нужно сохранить какую-то уникальную информацию в атрибуте данных HTML5, определенном для каждого элемента ячейки таблицы. Я надеялся объявить пользовательский атрибут данных (например: data-endpoint = "endpoint id" ), но я не уверен, что это можно сделать, если строки таблицы динамически генерируются с помощью DataTables.
Поскольку я не знаю/не понимаю, какие у меня есть варианты, я хотел бы описать, что я в идеале хотел бы сделать:
- Создайте копию данных и передайте им разобранные данные JSON.
- В создании экземпляра таблицы задайте настраиваемый атрибут данных для каждого элемента ячейки таблицы.
- Получите доступ к событию щелчка ячейки таблицы, передайте ей информацию, хранящуюся в правильном атрибуте данных, чтобы получить правильную конечную точку.
- Создайте постин, который отобразит результаты, полученные от конечной точки.
Часть, которую я не понимаю, - это создание пользовательского атрибута данных для элемента ячейки таблицы. Возможно ли это, или мне нужно подумать о другом подходе. Любая помощь очень ценится!
Ответы
Ответ 1
Вы можете попробовать с обратным вызовом createdRow
при создании экземпляра. Пример:
$table.dataTable({
"destroy": true, // To replace existing data
"data": jsonData,
"columns": columns,
// Per-row function to iterate cells
"createdRow": function (row, data, rowIndex) {
// Per-cell function to do whatever needed with cells
$.each($('td', row), function (colIndex) {
// For example, adding data-* attributes to the cell
$(this).attr('data-foo', "bar");
});
}
});
Я думаю, это поможет вам сделать то, что вам нужно.
Ответ 2
Я должен был сделать что-то вроде этого. Я не уверен относительно остальных, но я использовал параметр columnDefs для установки атрибутов.
....
"destroy": true, // To replace existing data
"data": jsonData,
"columns": columns,
// Sets the attribute
"columnDefs": [{
"targets":'_all',
"createdCell": function(td){
td.setAttribute('foo','bar');
}
}]
...
Он по-прежнему использует параметр createdCell, но он имитирует то, что я нашел в их документации (https://datatables.net/reference/option/columns.createdCell).