【问题标题】:loading screen in shiny while calling a function from the server side [duplicate]从服务器端调用函数时加载屏幕闪亮[重复]
【发布时间】:2017-11-18 02:25:33
【问题描述】:

您好,我正在编写一个闪亮的应用程序,在服务器端代码上,当用户单击 Run 按钮时,我正在调用一个函数。我遇到的问题是该功能需要大约 10-25 分钟才能运行,并且用户可能在此期间多次单击该按钮。函数运行结束后,我向用户显示下载文件的输出路径并关闭应用程序。如何防止用户多次单击按钮,例如功能运行时的加载屏幕?

observeEvent(input$runprocess, {
    rundownload()
    showModal(modalDialog(title ="Output folder: XYZ path",
                      actionButton("close", "Exit"),footer = NULL,
                      size = c("m"), easyClose = FALSE))
})

observeEvent(input$close, {
  js$closeWindow()
  stopApp()
}) 

【问题讨论】:

  • 在调用rundownload()之前添加一个modalDialog?
  • @JorisMeys 用户如何知道下载已完成?
  • 因为下载完成后,你有第二个modalDialog告诉它已经完成。我没有说“删除另一个”;-)
  • 现在我意识到我以前见过这个问题,所以请检查我标记的问题,以了解同一主题的更多变体。但一般规则是你调用任何类型的代码生成加载消息或任何之前你在同一个表达式中调用rundownload()(即相同的observe()observeEvent()调用)跨度>

标签: r shiny


【解决方案1】:

通过像这样添加一个额外的modalDialog:

observeEvent(input$runprocess, {
    showModal(modalDialog(p("Start downloading. This might take a while"),
                         title = "download started",
              #etc etc
              ))
    rundownload()
    showModal(modalDialog(title ="Output folder: XYZ path",
                      actionButton("close", "Exit"),footer = NULL,
                      size = c("m"), easyClose = FALSE))
})

observeEvent(input$close, {
  js$closeWindow()
  stopApp()
}) 

为了防止用户多次单击运行按钮,您可以在单击后使用shinyjs 将其隐藏。参见例如:Hide shiny output

【讨论】:

    猜你喜欢
    • 2019-11-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-01-26
    • 1970-01-01
    • 1970-01-01
    • 2017-07-15
    • 1970-01-01
    相关资源
    最近更新 更多