我的闪亮应用程序生成一些用户可以下载的文件 . 为此,我已将下载按钮放在ui中 . 但是,当页面启动时,在完成任何计算之前,没有任何内容可供下载 . 我想阻止用户下载空白页面 .
为此,我想在输出准备好之前禁用downloadButton . 但我不知道该怎么做 . 我已经找到了禁用ActionButton的方法(比如ShinyBS包和其他JS代码),但是没有用于downloadButton的方法 .
现在,如果输出没有准备好,我使用validate()来抛出错误 . 但是,当单击downloadButton时,会打开一个新的空网页,其中包含一条很难看的错误信息 .
让我知道你的想法 .
这是我的ui代码
downloadButton('download', 'Download Lasso component matrix')),
这是我的服务器代码:
output$download_matrix <- downloadHandler(
filename = function() {
validate(
need(is.null(outputData())==FALSE, "No data to download yet")
)
paste('combined_model_matrix', '.txt', sep='') },
content = function(file) {
write.csv(outputData()$combinedAdjMtr, file)
})
2 回答
根据您的评论:
假设操作按钮名为
input$start_proc
.在server.R中:
然后在 ui.R 中,您可以编写一些javascript来处理自定义消息事件 .
一个完整的例子是:
server.R
ui.R
在该示例中,通过等待5秒来伪造数据处理 . 然后下载按钮就绪 . 我还在消息中添加了一些"fake"
fileSize
信息,以演示如何向用户发送额外信息 .请注意,因为Shiny将
actionButton
实现为<a>
标记而不是<button>
,并且它会绑定click
事件 . 因此,为了完全禁用它,除了添加disabled
属性以使其看起来被禁用之外,还需要通过添加内联onclick
属性来覆盖其click
事件 . 否则,用户仍然可能会意外地单击(看似已禁用)下载按钮并触发下载 .只需添加另一个与Xin相似的答案,但使用一个原生支持启用/禁用按钮的包(shinyjs),而不是自己处理凌乱的javascript . 使用此包,您只需调用
disable("download")
或enable("download")
即可 .这是一个完整的例子,复制了Xin的答案,但是这个包