6

我很确定我的问题已经有了答案,但是无论我多么努力地搜索,我都找不到任何可以在这种情况下工作的解决方案。所以如果这被认为是微不足道的,请不要拍。

现在问题来了:

假设我们正在使用 Shiny 渲染数据表,当我将鼠标悬停在单元格上并动态呈现来自底层数据集的输出时,我想获取每个单元格的 id (rowID+columnID)。我知道已经有鼠标悬停的解决方案,例如 shinyBS 或这里的示例:

    #server.R:
    shinyServer(function(input, output) {
  dat <- list(iris,cars) 
  output$tabset <- renderUI({
    tabs <- list()
    for(i in c(1,2)){
      id <- paste("id",i, sep="")
      tabs[[i]] <- tabPanel(title=id,DT::dataTableOutput(outputId=id)) #dynamic panels
    }
    do.call(tabsetPanel,c(tabs, id='Panel'))
  })

  lapply(1:2,function(i){
    id <- paste("id",i, sep="")
    output[[id]] <- DT::renderDataTable({
      dat[[i]]},
      extensions = c('Scroller'),
      options=list(deferRender=TRUE, dom='T<"clear">fitrS', scrollY=540, searchHighlight = TRUE,
                   scrollCollapse=TRUE, autoWidth = TRUE,
                   columnDefs = list(list(width = '60%', targets = '_all',
                                          render = JS("function(data, type, row, meta) {",
                                                      "return type === 'display' && data.length > 5 ?",
                                                      "'<span title=\"' + data + '\">' + data.substr(0, 5) + '...</span>' : data;",
                                                      "}"
                                          )))),
      callback = JS('table.page(3).draw(false);'),
      escape=FALSE, rownames=TRUE,class = 'table-condensed', server=TRUE)
      })
})

和 ui.R

    #ui.R:
library(shiny)
library(DT)

ui <- fluidPage(
  uiOutput('tabset')
)

如果单元格的长度为 5 或更多,则鼠标悬停会修剪单元格。我现在想做的是查看突出显示的单元格是否来自具有“id1”的面板,是否来自 Sepal.Length 列,并且鼠标悬停应该显示面板“id2”中的数据,该面板具有与 Sepal 中相同的 rowId。长度并且应该显示来自列 dist 的数据。基本上我不想呈现静态内容或只是修改已经在该单元格中的字符串,而是根据悬停在哪个单元格上动态呈现附加内容。Shiny 和 JavaScript 有可能吗?

感谢您的任何意见。

4

0 回答 0