是否可以有一个条件为全局变量的Shiny ConditionalPanel?

TJ_*_*TJ_ 4 r shiny

我的目标是将tabsetPanel包裹在conditionalPanel中,其条件是全局变量为false。

用户界面

mainPanel(
 conditionalPanel("searchPage == \"false\"",
     tabsetPanel(
      tabPanel("Summary",htmlOutput("summary")),
      tabPanel("Description", htmlOutput("description"))
))),
Run Code Online (Sandbox Code Playgroud)

全球

searchPage <- "true"
Run Code Online (Sandbox Code Playgroud)

然后在server.RI中为它分配新的值几次,但是都像这样:

 observeEvent(input$openButton, 
           output$results <- renderUI({
             textOutput("")
             searchPage <- "false"
           }))
Run Code Online (Sandbox Code Playgroud)

无论我做什么,我总是得到“ Uncaught ReferenceError:未定义searchPage”。我尝试将global.R更改为使用引号而不是使用引号,使用<-或<<-的多种不同组合,使其成为this.searchPage,my.searchPage和许多其他东西(当然总是使server.R和ui.R匹配),但运气还不足。

Dea*_*ali 5

由于关于该问题的信息的评论中提到的,这是对于一个完美的用例/ / 功能。每当您需要有条件地显示条件不是输入的简单javascript表达式的内容时,都可以使用这些函数代替。shinyjs toggle()show()hide()conditionalPanel()

为了使用这些功能,您需要某种方式来指定要隐藏/显示的元素(在本例中为mainPanel())。简便的方法是将整个面板包装在带有ID的div中。因此,像mainPanel(div(id = "mainpanel", ...))voila 这样定义面板,面板上有一个ID,现在您可以调用shinyjs::show("mainpanel")或随时hide()在服务器代码中进行调用。