2017-09-21 62 views
0

我正在使用bsCollapse面板(來自shinyBS庫),這在很大程度上在我正在開發的應用程序中。我希望能夠在代碼中顯示的服務器端定義一個面板。該代碼不運行並返回錯誤ERROR: argument is of length zero。問題似乎是bsCollapse不會接受renderUI參數,並要求bsCollapsePanel調用位於ui.R.renders中的bsCollapsePanel UI

我試過在服務器端有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") 
    )))) 

回答

0

看來bsCollapse需要bsCollapsePanel所以只是添加這個,然後你可以rnder任何你想要進入的內容:

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) 
+0

感謝您的迴應,但我特別希望在服務器端有'bsCollapsePanel'和在用戶界面有'bsCollapse'。我需要動態生成一些面板,並且我不想訴諸於renderUI中的我的整個UI(我的UI的大部分都是可摺疊的)。 – Nicky