An *_*ist 2 javascript jquery r datatables shiny
我有相当简单的应用程序(如下),我尝试使用具有折叠组功能的 DataTable 输出分组表。我在这里找到了在 jQuery 中实现的解决方案,但我不知道如何将如此复杂的实现转移到 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)
Run Code Online (Sandbox Code Playgroud)
编辑
给定 AEF 注释,我们可以调整代码以指定一旦单击表主体就必须执行该操作。这确实会折叠任何行直到下一组。剩下的部分是将点击限制为仅对组行。现在回调应该是:
callback = JS("$('#DataTables_Table_0 tbody').on('click', 'tr', function () {
$(this).nextUntil('.group').toggleClass('hidden');});"))
Run Code Online (Sandbox Code Playgroud)
事实证明这是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)
Run Code Online (Sandbox Code Playgroud)
再次感谢您的报道!
DT 的 Github 问题的代码:https ://github.com/rstudio/DT/issues/759
| 归档时间: |
|
| 查看次数: |
2348 次 |
| 最近记录: |