[英]How to dynamically generate Shiny sidebarPanel contents?
我正在尝试创建一个应用程序,在该应用程序中,最初向用户显示的侧边栏selectInput
包含选项列表:A,B,C和D –由文件系统内容填充。
根据用户选择的选项,我想在侧边栏的其余部分中填充特定于选择的内容。 例如,如果用户选择“ A”,则侧边栏将包含附加的selectInput
和dateRangeInput
。
为了保持代码干净,我将所有“ A”特定的代码都保留在handle_A.R
等中。这意味着最终当我决定添加新的选择“ E”时,我只需要将所有代码放入handle_E.R
中handle_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.