如何在 R Shiny 中显示折叠 DT 中的 rowGroup 计数?

问题描述 投票:0回答:1

我正在查看上一个问题 Collapse rowGroup Shiny 以及提供的解决方案。

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');",
    "});",
    "table.one('init', () => $('#my_table .dtrg-group').trigger('click'))"
  )

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

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

我设法增强了 JS,使该表的唤醒视图折叠起来。此示例中的数据基于 dataSrc = 2 进行折叠,该 dataSrc = 2 对应于 mtcards 表的第二列,即“cyl”列。我需要什么:当表格折叠时,我需要能够看到每个气缸类别的汽车数量。我怎样才能做到这一点?

javascript r shiny datatables dt
1个回答
1
投票

这是一个示例,其中通过编辑相应的

innerHTML
将每个类别的计数写入折叠的行组中。您可以通过将以下
JS
添加到回调中来获得此信息。

table.on('init', () => $('#my_table .dtrg-group').each(function(i, obj) {
    var grpcount = $(this).nextUntil('.dtrg-group').length.toString();
    this.innerHTML = this.innerHTML.replace('</th>', ', count: ' + grpcount + '</th>');
}));"

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');",
    "});",
    "table.one('init', () => $('#my_table .dtrg-group').trigger('click'))",
    "table.on('init', () => $('#my_table .dtrg-group').each(function(i, obj) {",
    "    var grpcount = $(this).nextUntil('.dtrg-group').length.toString();",
    "    this.innerHTML = this.innerHTML.replace('</th>', ', count: ' + grpcount + '</th>');",
    "}));"
)

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

# Run the application
shinyApp(ui = ui, server = server)
© www.soinside.com 2019 - 2024. All rights reserved.