我闪亮的应用程序中的数据需要几秒钟的时间来处理。\n我有一个下载按钮,我希望它在数据准备好之前不可单击,或者让下载处理程序等待准备好。\n目前单击下载5 秒前按下按钮会返回默认的 html 文件,5 秒后它会按预期运行。
\n\n我当前的解决方案是使用`shinyjs::hide/show。I\xe2\x80\x99ve 在下面显示了这一点。
\n\n这是最佳实践吗?另外,为什么一shinyjs::useShiny()开始呢?它似乎是那个包所独有的。
ui <- fluidPage(\nshinyjs::useShiny(),\n shinyjs::hidden(downloadButton("downloadData", "Download"))\n)\n\nserver <- function(input, output) {\n # Our dataset\n data <- mtcars\n\nif(is.null(mtcars)){shinyjs::hide(\xe2\x80\x9cdownloadData\xe2\x80\x9d)}\nelse{shinyjs::show(\xe2\x80\x9cdownloadData\xe2\x80\x9d)}\n\n output$downloadData <- downloadHandler(\n filename = function() {\n paste("data-", Sys.Date(), ".csv", sep="")\n },\n content = function(file) {\n write.csv(data, file)}\n )\n}\n\nshinyApp(ui, server)\nRun Code Online (Sandbox Code Playgroud)\n
你所描述的完全合理,并且过去已经在 stackoverflow 上建议过。您还可以使用禁用/启用而不是隐藏/显示,只要您觉得更好的用户体验即可。
需要 useShinyjs() 来设置正在发生的所有 R <--> JavaScript 通信。如果没有它,当您尝试从服务器调用shinyjs函数时,什么也不会发生,因为UI没有使用javascript初始化。自从我制作shinyjs以来,其他一些包也采用了这种模式,特别是也处理javascript的包。
| 归档时间: |
|
| 查看次数: |
767 次 |
| 最近记录: |