【问题标题】:Shiny code executed without waiting for inputs from modalDialog无需等待来自 modalDialog 的输入即可执行闪亮的代码
【发布时间】:2020-07-15 22:34:53
【问题描述】:

我在执行闪亮代码时遇到问题,而无需等待来自 modalDialog 的用户输入。这是一个简单的例子。该应用程序有一个打印按钮和一个输出框。当用户单击按钮时,应该弹出一个 modalDialog 询问用户要打印什么。如果用户点击Print Button 1按钮,那么最终的打印输出将是Button 1 Print Result。按钮 2 也是如此。

library(shiny)


# Main app UI
ui <- fluidPage(
  actionButton('print','Print')
  ,verbatimTextOutput('output')

)

# Main app server
server <- function(input, output, session) {
  printVal <- reactiveVal("Should not be printing this")
  
  observeEvent(input$print,{
    showModal(
      modalDialog(
        title = 'What to print?'
        ,"Decide what to print"
        ,footer = tagList(
          actionButton('btn1','Print Button 1')
          ,actionButton('btn2','Print BUtton 2')
          
        )
      )
    )
    
    output$output <- renderPrint({printVal()})
  })
  
  observeEvent((input$btn1),{
    printVal('Button 1 Print Result')
    removeModal()
  })
  observeEvent((input$btn2),{
    printVal('Button 2 Print Result')
    removeModal()
  })
}

shinyApp(ui, server)

但最终发生的是,当单击“打印”时,设置为“不应该打印此”的默认值将打印在输出之前用户有机会单击 modalDialog 中的任何按钮。我想要的是唯一的输出应该是单击按钮 1 或 2 的结果。但它似乎闪亮执行该行

 output$output <- renderPrint({printVal()})

无需等待来自 modalDialog 的操作。

基本上,我怎样才能使 printVal 在使用之前从 modalDialog 更新?提前感谢您的回复。

【问题讨论】:

    标签: r shiny modal-dialog


    【解决方案1】:

    您过早地定义了output$output。试试这个

    observeEvent((input$btn1),{
        output$output <- renderPrint({printVal()})
        printVal('Button 1 Print Result')
        removeModal()
      })
      observeEvent((input$btn2),{
        output$output <- renderPrint({printVal()})
        printVal('Button 2 Print Result')
        removeModal()
      })
    

    对我来说很好用。

    【讨论】:

    • 我明白你的意思。谢谢!
    • 抱歉 - Stack Overflow 新手,不熟悉适当的礼仪。我已经接受了。
    猜你喜欢
    • 2015-02-19
    • 2021-06-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-22
    • 1970-01-01
    • 1970-01-01
    • 2014-11-04
    相关资源
    最近更新 更多