You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将R中RowGroup列索引ColNum传递给Shiny DT按钮的JS函数?

解决方案

要将R端定义的ColNum传递给DT按钮的JavaScript动作函数,不需要使用sendCustomMessage(这适用于动态通信场景),直接将R变量的值嵌入到JS代码中即可。以下是修正后的完整代码:

library(shiny)
library(DT)

ui <- fluidPage(
  titlePanel("Collapse/Expand table"),
  mainPanel(
    tabsetPanel(
      tabPanel("table1",
               dataTableOutput("my_table"))
    )
  )
)

# 程序定义的分组列索引
ColNum <- 3

server <- function(input, output, session) {
  
  output$my_table <- DT::renderDataTable({
    datatable(
      mtcars[1:15, 1:5],
      extensions = c('RowGroup', "Buttons"),
      options = list(
        rowGroup = list(dataSrc = ColNum),
        pageLength = 20,
        dom = 'tB',
        buttons = list(
          list(
            extend = "",
            text = "切换所有分组",
            # 直接将R的ColNum值嵌入JS代码
            action = JS(sprintf(
              "function(e, dt, node, config) { 
                // 若要实现展开/折叠所有分组,执行以下代码
                $('#my_table .dtrg-group').trigger('click');
                // 若需动态修改分组列,可保留此行:
                // dt.rowGroup().dataSrc(%d).draw();
              }", 
              ColNum
            ))
          )
        )
      ),
      callback = 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'))"
      ),
      selection = 'none'
    )
  })
}

shinyApp(ui = ui, server = server)

关键修正点:

  • 移除了不必要的session$sendCustomMessage代码块,因为ColNum是程序定义的固定值,无需动态传递。
  • 使用sprintf将R的ColNum值直接插入到JavaScript函数中,生成包含正确列索引的JS代码。
  • 修正了按钮动作逻辑:如果需求是一键展开/折叠所有分组,触发.dtrg-group的点击事件即可(与原callback逻辑一致);若需动态修改分组列,保留dt.rowGroup().dataSrc(%d).draw()即可。

原理说明:

在DT::renderDataTable中,JS()函数可接收R生成的字符串,因此可以利用R的字符串格式化工具(如sprintf)将R变量值直接嵌入到JavaScript代码中,实现静态参数传递。只有当ColNum需要在应用运行时动态变化(如用户选择不同列作为分组),才需要使用sendCustomMessage进行动态通信。

内容的提问来源于stack exchange,提问作者Corentin Wicht

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.07 22:35:19