【问题标题】:Pop up window after clicking on DT in shiny在闪亮中点击DT后弹出窗口
【发布时间】:2017-01-10 17:32:15
【问题描述】:

单击数据表内的操作按钮后,我正在努力获得一个弹出窗口。 所有按钮都具有相同的 id。 有人可以帮我看看下面的例子吗?

例子:

rm(list = ls())
library("shiny")
library("shinydashboard")
library("shinyBS")
mymtcars = mtcars
mymtcars$id = 1:nrow(mtcars)

header <- dashboardHeader(title = "Example")

body <- dashboardBody(
    mainPanel(
        dataTableOutput("mytable"),
        bsModal("myModal", "Your plot", "button", size = "large",plotOutput("plot"))
    )               )
sidebar <- dashboardSidebar()
ui <- dashboardPage(header,sidebar,body,skin="red")
server = function(input, output, session) {

    randomVals <- eventReactive(input$button, {
        runif(50)       })

    output$plot <- renderPlot({
        hist(randomVals())
    })



    output$mytable = renderDataTable({
  #    addCheckboxButtons <- paste('<button id=\"button\" type=\"button\" data-toggle=\"modal\" class=\"btn btn-default action-button\">Show modal</button>')
      addCheckboxButtons <- paste('<button id=\"button\" type=\"button\" class=\"btn btn-default action-button\" data-toggle=\"modal\" data-target=\"myModal\">Open Modal</button>')

        cbind(Pick=addCheckboxButtons, mymtcars)
    }, options = list(orderClasses = TRUE, lengthMenu = c(5, 25, 50), pageLength = 25),escape=F
    )

    observeEvent(input$button, {
        toggleModal(session, "myModal", "open")
    })
    }

runApp(list(ui = ui, server = server))

【问题讨论】:

    标签: javascript r shiny action-button shinybs


    【解决方案1】:

    我让它工作了,但它需要很多东西。首先,我让每个按钮都独一无二。您不能复制 HTML id。接下来,要在 DataTables 中使用 Shiny 输入,您必须在回调事件中使用 javascript 解除绑定。由于我之前提到的 HTML 重复内容,我创建了一个独特的 bsModal 并为每个按钮绘制了图。我用了很多lapply。您还需要DT 包。代码如下:

    rm(list = ls())
    library("shiny")
    library("DT")
    library("shinydashboard")
    library("shinyBS")
    mymtcars = mtcars
    mymtcars$id = 1:nrow(mtcars)
    
    shinyInput = function(FUN, len, id, ...)
    {
      inputs = character(len)
      for (i in seq_len(len))
      {
        inputs[i] = as.character(FUN(paste0(id, i), ...))
      }
      inputs
    }
    
    header <- dashboardHeader(title = "Example")
    
    body <- dashboardBody(mainPanel(DT::dataTableOutput("mytable"), 
                                    lapply(seq_len(nrow(mtcars)), 
                                     function(i)
                                       {
                                         bsModal(paste0("myModal", i), "Your plot", paste0("btn", i), size = "large", 
                                          plotOutput(paste0("plot", i)))
                                         })))
    sidebar <- dashboardSidebar()
    ui <- dashboardPage(header, sidebar, body, skin = "red")
    server = function(input, output, session)
    {
      randomVals <- reactive({
        # call input from each button arbitrarily in code to force reactivity
        lapply(seq_len(nrow(mymtcars)), function(i)
        {
          input[[paste0("btn",i)]]
          })
    
        runif(50)
      })
    
      plot <- reactive({
        hist(randomVals())
      })
    
      lapply(seq_len(nrow(mymtcars)), function(i)
      {
    
        output[[paste0("plot", i)]] <- renderPlot(plot())
    
    
        observeEvent(input[[paste0("btn", i)]], {
          toggleModal(session, paste0("myModal", i), "open")
        })
    
      })
    
      output$mytable = DT::renderDataTable({
    
        btns <- shinyInput(actionButton, nrow(mymtcars), "btn", label = "Show modal")
    
        cbind(Pick = btns, mymtcars)
    
      }, options = list(orderClasses = TRUE, lengthMenu = c(5, 25, 50), pageLength = 25, 
                        preDrawCallback = JS("function() { 
                                             Shiny.unbindAll(this.api().table().node()); }"), 
                        drawCallback = JS("function() { 
                                          Shiny.bindAll(this.api().table().node()); } ")), 
      escape = F)
    
      }
    
    runApp(list(ui = ui, server = server))
    

    【讨论】:

      猜你喜欢
      • 2017-02-27
      • 1970-01-01
      • 2017-09-28
      • 1970-01-01
      • 2018-09-23
      • 2016-09-23
      • 1970-01-01
      • 2021-10-18
      • 2021-08-26
      相关资源
      最近更新 更多