downloadHandler在tabPanel的其他面板中执行失败

问题描述

我的闪亮应用程序的目的是让用户导入一个 excel 文件,应用程序将显示表格(经过一些数据操作)。用户还可以下载并保存表格,使用他们指定的任何名称

代码运行良好。但是,当我决定添加一个 tabPanel 时,下载按钮在第一个面板中工作正常,但只在第二个面板中下载 HTML,而不是导入的表格。如果不清楚,您可以复制代码并尝试运行它。第二个面板只下载页面的 HTML。

为什么它会在第二个面板中下载 HTML,而相同的代码在第一个面板中运行得很好?

界面:

ui <- fluidPage(
  tabsetPanel(
    tabPanel("Panel1",sidebarLayout(
               sidebarPanel(fileInput("df1","Import File",accept = ".xlsx"),textInput('df1sheet','Sheet Name (Case-Sensitive)'),actionButton("update","Update")),mainPanel(tableOutput("table1"),useShinyjs(),actionButton("download","Download Table"),conditionalPanel(
                           "false",downloadButton("downloadtable")
                         ),useshinyalert())
             )),tabPanel("Panel2",sidebarLayout(
               sidebarPanel(fileInput("df2",textInput('df2sheet',actionButton("update2",mainPanel(tableOutput("table2"),actionButton("download2",downloadButton("downloadtable2")
                         ),useshinyalert())
             ))
    )
)

服务器:

server <- function(input,output) {
  
  ## Code for Panel 1
  
  df1 <- eventReactive(input$update,{
    input$df1$datapath
  })
  
  df1sheet <- eventReactive(input$update,{
    input$df1sheet
  })
  
  data1 <- reactive({
    req(input$df1)
    req(df1sheet())
    read_excel(df1(),sheet = df1sheet())
  })
  
  output$table1 <- renderTable({data1()}) 
  
  ## User can press on actionButton (id: download),and shinyalert will pop up,asking 
  ## for a filename input. After pressing confirmButton,runjs will click on 
  ## downloadButton and trigger downloadHandler.

  observeEvent(input$download,{
    shinyalert("Save as:",type = "input",size = "xs",cloSEOnesc = TRUE,cloSEOnClickOutside = TRUE,showConfirmButton = TRUE,showCancelButton = TRUE,confirmButtonText = "Save",confirmButtonCol = "#0075B8",animation = TRUE)
  })
  
  output$downloadtable <- downloadHandler(
    filename = function () {paste(input$shinyalert,".csv",sep = "")},content = function(file) {write.csv(data1(),file)}
  )
  
  observeEvent(input$shinyalert,{
    if (input$shinyalert != FALSE) {
      shinyjs::runjs("$('#downloadtable')[0].click();")
    }
  })
  
  ## Code for Panel 2
  
  df2 <- eventReactive(input$update2,{
    input$df2$datapath
  })
  
  df2sheet <- eventReactive(input$update2,{
    input$df2sheet
  })
  
  data2 <- reactive({
    req(input$df2)
    req(df2sheet())
    read_excel(df2(),sheet = df2sheet())
  })
  
  output$table2 <- renderTable({data2()}) 
  
  ## User can press on actionButton (id: download),runjs will click on 
  ## downloadButton and trigger downloadHandler.

  observeEvent(input$download2,animation = TRUE,inputId = "shinyalert2")
  })
  
  output$downloadtable2 <- downloadHandler(
    filename = function () {paste(input$shinyalert2,content = function(file) {write.csv(data2(),file)}
  )
  
  observeEvent(input$shinyalert2,{
    if (input$shinyalert2 != FALSE) {
      shinyjs::runjs("$('#downloadtable2')[0].click();")
    }
  })
}

解决方法

您在 LATEST 中的第二个 downloadButton 似乎是问题所在。

替换

conditionalPanel

有了这个

                 conditionalPanel(
                   "false",downloadButton("downloadtable2")
                 ),

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...