【发布时间】:2019-10-31 22:13:07
【问题描述】:
我正在开发一个闪亮的应用程序。我需要用户输入一个文件,然后从那个文件中得到一个表。
我需要一个按钮来执行此操作:
如果输入为空,则什么都没有
如果输入不为null,则生成表格并显示
如果表格已经显示,将其隐藏。
我尝试将表格输出设置为hidden,并在单击按钮时切换它。它可以工作,但是当我再次按下按钮隐藏表格时,表格会重新加载。
我的 UI 中有这个:
actionButton(inputId = "viewFile", label = "View file"),
hidden(tableOutput("fileTable"))
这是我在服务器上尝试过的:
observeEvent(input$viewFile,{
output$fileTable <- renderTable({...)}) #generating the table
toggle("fileTable")
})
正如您所理解的,当单击viewFile 按钮时,会呈现fileTable 输出,然后进行切换(它不再隐藏,所以显示出来了)。第一次生成输出,非常完美。
但是,如果我再次单击按钮以隐藏表格,则会再次计算 renderTable。这是一个无用的操作(您不想生成表格输出只是为了隐藏它)。
有什么方法可以让切换保持工作,但阻止 tableOutput 的重新生成?我考虑过在输出上使用if,但您无法评估来自服务器的输出项。
(Warning: Error in $.shinyoutput: Reading objects from shinyoutput object not allowed.)
最后一个细节:稍后,如果文件已更改,我将尝试通过重新生成表格输出来改进我的应用程序,是否也有办法做到这一点?
感谢您对初学者的问题表示抱歉。我有点失落。如果您对我的代码有任何疑问,请不要犹豫。
【问题讨论】:
-
对不起,我误解了你的问题。如果您只想将
viewFile用于切换状态,那么为什么不将renderTable移到observeEvent之外呢? -
这正是我所做的!刚回答你,我就有了这个想法。解决了:-)
标签: r user-interface shiny shinyjs