Как упомянул @David Joequera в комментариях, это ошибка JavaScript, когда один из обработчиков событий по умолчанию для Datatable выдает ошибку, поскольку в строке Group отсутствует свойство строки.
В качестве обходного пути мы можем удалить этот обработчик событий, чтобы сработал тот, который скрыт.
Также я бы порекомендовал ориентировать строки группы только с помощью обработчика событий, чтобы можно было только полностью закрыть и открыть группы и не могут скрывать группы. Вы можете достичь этого, просто добавив «.group» к вашему событию Listener Target. В результате получается следующий код:
table.on('click', 'tr.group', function () {
var rowsCollapse = $(this).nextUntil('.group');
$(rowsCollapse).toggleClass('hidden');
})
Чтобы удалить обработчик событий, нам нужно подождать, пока таблица будет загружена правильно и обработчик проблемного c подключен, поэтому я бы рекомендовал работать с небольшим тайм-аут. 1000 мс работал нормально для меня и не должен вызывать проблем с юзабилити. поэтому добавление этого кода в обратные вызовы должно решить проблему:
setTimeout(function(){$('#DataTables_Table_0').off('click.dt','tbody td')},1000);
Имейте в виду, что идентификатор удаляемой таблицы данных может измениться в вашем окончательном / реальном решении
В результате этого кода для демо:
library(shiny)
library(DT)
library(shinyjs)
ui <- fluidPage(
# Application title
titlePanel("Collapse/Expand table"),
mainPanel(
DTOutput("my_table")
),
)
server <- function(input, output) {
output$my_table<-DT::renderDataTable({
datatable(mtcars[1:15,1:5],
extensions = 'RowGroup',
options = list(rowGroup = list(dataSrc=c(3)),
pageLength = 20),
callback = JS("
setTimeout(function(){$('#DataTables_Table_0').off('click.dt','tbody td')},1000);
table.on('click', 'tr.group', function () {
var rowsCollapse = $(this).nextUntil('.group');
$(rowsCollapse).toggleClass('hidden');
});"))
})
}
# Run the application
shinyApp(ui = ui, server = server)