我正在尝试创建一个应用,其中用户最初会看到一个侧边栏selectInput
,其中包含一个选项列表:A,B,C和D - 由文件系统内容填充。
根据用户选择的选项,我想用选择特定的内容填充侧边栏的其余部分。例如,如果用户选择“A”,则侧边栏将包含其他selectInput
和dateRangeInput
。
为了保持代码清洁,我在handle_A.R
等中保留了所有“A”特定代码。这意味着最终当我决定添加新选项“E”时,我只需要放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
更新为相应的周一/周三/周五的计算开始和结束日期。此外,如果任何日期包含公共假日,我想显示一个额外的复选框,让用户忽略公共假日。
如果有人可以帮助我,我会非常感激!
答案 0 :(得分:0)
原来我需要的是将逻辑置于observe
并致电updateCheckBoxInput
。