【发布时间】:2014-10-04 13:14:13
【问题描述】:
我的闪亮应用会生成一些用户可以下载的文件。为此,我在 ui 中放置了下载按钮。但是,当页面启动时,在任何计算完成之前,没有什么可下载的。我想阻止用户下载空白页面。
为此,我正在考虑在输出准备好之前禁用 downloadButton。但我不知道该怎么做。我找到了禁用 ActionButton 的方法(例如 ShinyBS 包和其他 JS 代码),但没有用于 downloadButton。
现在,如果输出没有准备好,我使用 validate() 来抛出错误。但是,当单击 downloadButton 时,会打开一个新的空网页,其中包含一条丑陋的错误消息。
让我知道你的想法。
这是我的用户界面代码
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)
})
【问题讨论】:
-
条件(准备下载)是否仅对服务器可见?如果您可以在
ui.R上检测到某些内容,您可以尝试将downloadButton包装为conditionalPanel。如果条件不满足,您可以隐藏它。 -
或者,输入中除了下载按钮之外还有什么会触发数据处理的吗?因为似乎数据处理依赖于一些用户输入。如果你能提供更多细节,我可以给你一个例子。
outputData是反应值吗? -
你说得对,
conditionalPanel是解决此问题的最简单方法,我承认有时我倾向于使用此快捷方式。感觉不好,因为删除由于某些特殊条件而无法按下的按钮违反了良好界面设计的所有规则。我希望在 Shiny 中有一个conditionalDisablePanel。作为一种解决方法,我让按钮保持启用状态并显示一条错误消息来解释原因。 -
@DieterMenne,你总是可以编写一些 Javascript 来实现类似
conditionalDisablePanel的东西。实际上,您可以使用 Javascript 显着增强您的 Shiny App。 -
@DieterMenne:受您的
conditionalDisabledPanel想法的启发,这里有一个 R sn-p 正是这样做的 :) gist:condDisabledPanel.R
标签: javascript r shiny shinyjs