繁体   English   中英

如何动态生成Shiny sidebarPanel内容?

[英]How to dynamically generate Shiny sidebarPanel contents?

我正在尝试创建一个应用程序,在该应用程序中,最初向用户显示的侧边栏selectInput包含选项列表:A,B,C和D –由文件系统内容填充。

根据用户选择的选项,我想在侧边栏的其余部分中填充特定于选择的内容。 例如,如果用户选择“ A”,则侧边栏将包含附加的selectInputdateRangeInput

为了保持代码干净,我将所有“ A”特定的代码都保留在handle_A.R等中。这意味着最终当我决定添加新的选择“ E”时,我只需要将所有代码放入handle_E.Rhandle_E.R

ui.R

pageWithSidebar(
  headerPanel("Test"),
  sidebarPanel(
    selectizeInput("choice", "Choice:", c()),
    uiOutput("sidebar")
  ),
  mainPanel(uiOutput("main"))
)

server.R (相关位)

output$sidebar <- renderUI({
  sidebarRenderer[[input$choice]](input, output, session)
})

我在server.R中有代码,该代码可获取所有handle_*.R脚本–每个脚本都注册其回调。

到现在为止还挺好。 我可以选择各种选择,然后调用相关的回调。 但是,我不知道如何实现回调,以便在用户与侧栏进行交互时可以更新侧栏小部件。 我本质上想执行以下操作(由于该函数需要向renderUI返回某些内容,因此将无法正常工作):

handle_A.R

sidebarRenderer[["A"]] <<- function(input, output, session) {
  selectInput("day", "Day:", c("Mon", "Wed", "Fri"))
  dates <- getDateList(input$day)
  dateRangeInput("date", "Date:", start=dates[0], end=dates[length(dates)])
  if (hasPublicHoliday(dates))
    checkboxInput("ignoreHolidays", "Ignore public holidays")
}

所以我想要的是自动将dateRangeInput更新为相应的Mon / Wed / Fri的计算的开始和结束日期。 此外,如果任何日期包含公众假期,我想显示一个额外的复选框,以使用户忽略公众假期。

如果有人可以帮助我,我将不胜感激!

事实证明,我所需要的只是将逻辑放入observe并调用updateCheckBoxInput

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM