为 DT 数据表上的双击事件创建 R 闪亮绑定

Posted

技术标签:

【中文标题】为 DT 数据表上的双击事件创建 R 闪亮绑定【英文标题】:Create an R shiny binding to a double click event on a DT datatable 【发布时间】:2021-05-13 17:05:06 【问题描述】:

我正在尝试通过使用 R 闪亮绑定双击 DT 数据表来创建一个动作。我没有明显的 JS 技能,所以我承认这是问题所在;-)。 从 SO 的示例中,我将以下代码拼凑在一起(代码 sn-p 并简化以显示问题):

library(shiny)
library(DT)

shiny::shinyServer(
  function(input, output, session) 
    
    data <- reactiveValues(data = NA)
    
    data$data <- "some code to make the data"
    
output$table <- DT::renderDataTable(
  DT::datatable(
    data = data$data, 
    class = 'compact',
    escape = FALSE,
    rownames = FALSE,
    selection = "single",
    options = (
      list(
        dom = "t",
        ordering = FALSE,
        paging = FALSE,
        autoWidth = FALSE,
        scrollY = "100vh",
        scrollCollapse = FALSE
      )
    ),
    callback = htmlwidgets::JS("     table.on('dblclick','tr', 
                                       function() 
                                         var row_=table.cell(this).index().row;
                                         var col=table.cell(this).index().column;
                                         Shiny.setInputValue('dt_dblclick', "dt_row": row_, "dt_col": col);
                                       
                                     );")
  ) 
, server = FALSE)
   
 
    observeEvent(input$dt_dblclick, 
      print(input$dt_dblclick)
    )
  )
    
  

我正在尝试创建绑定到闪亮的input 对象 (input$dt_dblclick) 和使用Shiny.setInputValue 的双击事件。但什么也没有发生。没有值被打印到控制台。 请帮忙。谢谢。

【问题讨论】:

【参考方案1】:

您必须使用td 而不是tr。并删除导致语法错误的双引号。

JS(
  "table.on('dblclick', 'td',", 
  "  function() ",
  "    var row = table.cell(this).index().row;",
  "    var col = table.cell(this).index().column;",
  "    Shiny.setInputValue('dt_dblclick', dt_row: row, dt_col: col);",
  "  ",
  ");"
)

【讨论】:

以上是关于为 DT 数据表上的双击事件创建 R 闪亮绑定的主要内容,如果未能解决你的问题,请参考以下文章

R闪亮的动态DT数据表记住过滤器/排序

是否可以使用wordcloud2创建闪亮的点击事件?

R 闪亮并巧妙地获得图例点击事件

如何将 WPF 中的命令绑定到控件的双击事件处理程序?

如何将WPF中的命令绑定到控件的双击事件处理程序

表格列的R闪亮鼠标悬停文本