renderUI中的bsCollapsePanel

时间:2017-09-21 14:11:07

标签: shiny

我在我正在处理的应用中大量使用bsCollapse面板(来自shinyBS库)。我希望能够在服务器端定义一个面板,如代码所示。代码不会运行并返回错误ERROR: argument is of length zero。问题似乎是bsCollapse不接受renderUI参数并且需要bsCollapsePanel调用在ui.R中。

我已经尝试在服务器端使用bsCollapse(),但是工作但很笨重,因为单个面板不会以相同的方式展开/折叠。我也试过加入outputOptions(output, "hipanel", suspendWhenHidden = FALSE),这个想法是我的" hipanel"会被评估得更早,但这并没有奏效。

我认为关键是renderUI / uiOutput没有返回bsCollapsePanel接受的对象(至少不是在正确的时间),但我不是确定该怎么做。

server.R

shinyServer(function(input, output){
    output$hipanel<-renderUI({
        bsCollapsePanel("hello",helpText("It's working!"))
    })
  })

ui.R

shinyUI(fluidPage(
    mainPanel(
        bsCollapse(
            bsCollapsePanel("This panel works",helpText("OK")),
            uiOutput("hipanel")
    ))))

1 个答案:

答案 0 :(得分:0)

似乎bsCollapse需要一个bsCollapsePanel所以只需添加此内容,然后您就可以将任何内容添加到内容中:

library(shiny)
library(shinyBS)

ui <- shinyUI(fluidPage(
  mainPanel(
    bsCollapse(
      bsCollapsePanel("This panel works",helpText("OK")),
      bsCollapsePanel("hello",uiOutput("hipanel"))
    )
  )))


server <- shinyServer(function(input, output,session){

  output$hipanel<- renderUI({
    helpText("It's working!")
  })
})


shinyApp(ui,server)

您可以随时动态创建整个内容

library(shiny)
library(shinyBS)

ui <- shinyUI(fluidPage(
  mainPanel(
    uiOutput("hipanel")
  )))


server <- shinyServer(function(input, output,session){

  output$hipanel<- renderUI({
    bsCollapse(
      bsCollapsePanel("This panel works",helpText("OK")),
      bsCollapsePanel("hello",helpText("It's working!"))
    )

  })
})


shinyApp(ui,server)