【发布时间】:2020-05-10 19:06:38
【问题描述】:
我有一个相当简单的应用程序(如下),我尝试使用 DataTable 输出分组表,并能够折叠组。我找到了在 jQuery here 中实现的解决方案,但我不知道如何将如此复杂的实现移到 R 中。
目前,我可以在一个组内折叠,但不能在整个组内折叠。有什么提示可以在 Shiny 中实现吗?
我的申请:
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("
table.on('click', 'tr', function () {
var rowsCollapse = $(this).nextUntil('.group');
$(rowsCollapse).toggleClass('hidden');
});"))
})
}
# Run the application
shinyApp(ui = ui, server = server)
编辑
给定 AEF 注释,可以调整代码以指定即使在单击表 body 后也必须发生。这确实会折叠任何行,直到下一组。剩下的部分是将点击限制在组行上。 回调应该是现在:
callback = JS("$('#DataTables_Table_0 tbody').on('click', 'tr', function () {
$(this).nextUntil('.group').toggleClass('hidden');});"))
【问题讨论】:
-
我对javascript不太了解,所以一直没搞清楚,所以我会告诉你我认为问题出在哪里:当你点击数据表的分组行时,如果你查看浏览器的控制台会有一个错误信息:Uncaught TypeError: Cannot read property 'row' of undefined。我建议在您的问题中添加
javascript标签,看看您是否可以获得额外的帮助,也许是github.com/rstudio/DT 上的问题? -
似乎问题在于事件处理程序附加到表本身而不是行。所以你给
on函数的第二个参数似乎没有得到尊重。 -
感谢您的评论,确实您是对的。调整回调允许折叠任何行。现在我只需要弄清楚如何将事件限制只对行进行分组。
-
有人可以帮助解决这里发布的问题。 stackoverflow.com/questions/60401871/…
标签: javascript jquery r shiny datatables