gpt4 book ai didi

javascript - 折叠行组 Shiny

转载 作者:行者123 更新时间:2023-12-01 08:33:08 24 4
gpt4 key购买 nike

我有一个相当简单的应用程序(如下),我尝试使用 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');});"))

最佳答案

事实证明这是DT的javascript代码的一个bug。有一个单击事件监听器,它将记录单击单元格的所有信息。但是,RowGroup 扩展会创建不属于原始数据集的新行并导致错误。 此错误会停止进一步的 JavaScript 执行。

在您的情况下,由于上一个单元格单击事件引发了错误,tr.group 事件不起作用。

我们已经修复了这个错误,DT 的开发版本应该可以使用以下代码:

library(shiny)
library(DT)
ui <- fluidPage(# Application title
titlePanel("Collapse/Expand table"),
mainPanel(DTOutput("my_table")))

callback_js <- JS(
"table.on('click', 'tr.dtrg-group', function () {",
" var rowsCollapse = $(this).nextUntil('.dtrg-group');",
" $(rowsCollapse).toggleClass('hidden');",
"});"
)

server <- function(input, output) {
output$my_table <- DT::renderDT({
datatable(
mtcars[1:15, 1:5],
extensions = 'RowGroup',
options = list(rowGroup = list(dataSrc = 3), pageLength = 20),
callback = callback_js,
selection = 'none'
)
})
}

# Run the application
shinyApp(ui = ui, server = server)

再次感谢您的报告!

DT 的 Github 问题代码:https://github.com/rstudio/DT/issues/759

关于javascript - 折叠行组 Shiny ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59896704/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com