#javascript #tabulator
#javascript #табулятор
Вопрос:
Я пытаюсь использовать Tabulator для создания «Списка свернутого адаптивного макета», согласно примеру здесь, и документации здесь.
Исходный код примера, похоже, не соответствует самому примеру, но, насколько я понимаю и играю с кодом, поскольку ширина таблицы уменьшается и, как следствие, столбцы сворачиваются, для каждой строки создаются таблицы, содержащие имена и значения для столбцов, которые были свернуты в результате уменьшения ширины таблицы. В случае примера с табулятором кажется, что в таблице задана определенная ширина, и это заставляет столбцы сворачиваться, потому что дополнительные столбцы не соответствуют этой ширине, но я хотел бы посмотреть, есть ли лучший и более динамичный способ сделать это.
Есть ли способ заставить столбцы автоматически сворачиваться? Это означает, что пользователю не придется вручную уменьшать ширину таблицы, чтобы свернуть столбцы — столбцы уже будут свернуты при загрузке, с возможностью немедленного развертывания и сворачивания свернутого списка без каких-либо дополнительных действий, необходимых от пользователя.
Я пробовал:
-
Делаем
table.hideColumn("column_name_here");
программно. -
Настройка
visible: false
для каждого столбца, который я хотел автоматически свернуть. -
CSS
display: none
для каждого столбца, который я хотел автоматически свернуть. -
Ручная настройка ширины CSS таблицы так, чтобы столбцы, которые я хотел свернуть, делали это без необходимости корректировать ширину таблицы после. Это … сработало, но мне потребовалось слишком много догадок и дурачиться, чтобы я подумал, что это лучшее и безопасное решение.
-
responsiveLayoutCollapseFormatter
(по общему признанию, я не до конца понимаю пример, который был приведен для этого)
Просто в качестве примера, товарищ по команде использует библиотеку Datatables для таблицы на своем веб-сайте, и они смогли передать className: 'none'
в объекты столбцов каждого из столбцов, которые они хотели автоматически свернуть на странице, и это действительно автоматически сворачивает эти столбцы в расширяемую таблицу имен столбцов и значений без необходимости делать что-либо еще:
Из приведенного выше примера все столбцы «Сообщение», «Псевдонимы», «Тип», «Очередь» и «Навык» имеют className: none в своих объектах столбца, в то время как остальные столбцы этого не делают; className: none приводит к автоматическому сворачиванию этих столбцов, что позволяет поместить их в список свернутых таблиц без необходимости устанавливать ширину вручную или настраивать ширину вручную на странице.
Есть ли эквивалент этого в Tabulator? Я ломал голову, пытаясь разобраться в этом. Спасибо!
Ответ №1:
Смысл форматирования адаптивного свертывания заключается в том, чтобы сворачивать строки, которые больше не помещаются в таблицу из-за недостаточной ее ширины, он предназначен для включения адаптивных макетов на экранах меньшего размера. Невозможно принудительно свернуть строку раньше, поскольку она сворачивает их на основе доступного горизонтального пространства в таблице.
При этом очень легко имитировать его эффект в таблице с помощью rowFormatter, если вы просто хотите отобразить некоторые значения под столбцами
var table = new Tabulator("#example-table", {
rowFormatter:function(row){
//row - row component
//define holder elements
var listHolder = document.createElement("div");
var list = document.createElement("table");
//retrieve row data
var data = row.getData();
///add each columns data to the list
listContents = "<tr><td><strong>Name</strong></td><td>" data.name "</td></tr>";
listContents = "<tr><td><strong>Age</strong></td><td>" data.age "</td></tr>";
//add contents to list
list.innerHTML = listContents;
listHolder.appendChild(list);
return listHolder;
},
});
Для получения более подробной информации о форматировании строк ознакомьтесь с документацией по формату
Вы можете использовать rowFormatter для внесения обширных изменений в макет строки, пример Row Formatter демонстрирует крайний случай, когда вы можете заменить столбцы все вместе, если это необходимо
С помощью кнопки переключения
если вам нужна кнопка переключения, похожая на средство форматирования свертывания, тогда вам нужно сделать две вещи: сохранить ссылку на элемент списка в данных строки и определить средство форматирования для добавления в столбец переключения.
//define toggle formatter
var toggleFormatter = function(cell){
var toggleEl = document.createElement("button"); // create your toggle button
toggleEl.addEventListener("click", function(){
var listHolder= cell.getData().listHolder; //lookup list element from row data
listHolder.style.display = listHolder.style.display ? "none" : ""; //toggle the display property on the list element
});
}
var table = new Tabulator("#example-table", {
rowFormatter:function(row){
//row - row component
//define holder elements
var listHolder = document.createElement("div");
var data = row.getData();
// CREATE TABLE AS PER ABOVE EXAMPLE
// store the list element on the row data (without triggering an update)
data.listHolder = listHolder;
return listHolder;
},
columns:[
//define toggle column
{formatter:toggleFormatter, width:30, minWidth:30, hozAlign:"center", resizable:false, headerSort:false},
//...other columns
]
});
Комментарии:
1. Спасибо за ответ, Оли. Есть ли какой-либо способ использовать ваше решение наряду с сохранением возможности разворачивать и сворачивать строки для списка данных столбца с помощью кнопки / -?
2. я обновил ответ с помощью кнопки переключения, он просто использует обычную кнопку, но вы можете легко изменить это на любой элемент, который вам нравится
3. Я попробовал, но, кажется, мне чего-то не хватает. Что касается вашего комментария «// СОЗДАТЬ ТАБЛИЦУ В СООТВЕТСТВИИ С ПРИВЕДЕННЫМ ВЫШЕ ПРИМЕРОМ», какие конкретные строки кода нужно поместить туда вместо этого комментария? Я думаю, что это сбивает меня с толку. Я ценю всю вашу помощь.
4. Это должен быть точно такой же код, что и в примере форматирования первой строки, вы просто хотите добавить
data.listHolder = listHolder
строку перед возвратом5. К сожалению, все еще не работает. 🙁 Если вы не возражаете взглянуть, вот JS Fiddle, который я создал. Общая таблица успешно создана, но кнопки переключения не отображаются, и не похоже, что дочерние строки создаются (извините, пришлось внести несколько правок для скрипки): jsfiddle.net/ISeeTheCode/zpt6k21w/8