簡體   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