[英]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.