Открытие нескольких элементов боковой панели вызывает перезагрузку-сбой в renderUI / uiOutput (?)

#r #shiny

#r #блестящий

Вопрос:

приведенный ниже код создает боковую панель с элементами TabItems; они снова содержат вложенные вкладки, которые в конечном итоге будут обращаться к некоторому выходу в основном корпусе при нажатии.

Моя проблема в том, что когда, например, TAB3 открыт, и я нажимаю, чтобы открыть TAB1 (или TAB2), не закрыв TAB3, TAB3 больше не загружается (хотя он открывается, как видно по значку подпункта>>)

Я использую renderUI и uiOutput для достижения этой цели, и я использую «do.call» для настройки подменю…

Я уже пытался изменить MenuItem на menuSubItem и т. Д. … Похоже, это не помогает. Это «нормальное поведение» или я что-то упускаю (?)

Вам всегда нужно закрывать вкладку перед открытием другой?

Конечно, любая помощь приветствуется!

Спасибо, Грегор

 library(shiny)
library(shinydashboard)
## set up a main body... no content needed
body <- dashboardBody( title="Title" )
## set up a sidebar with TABS containing subTABS
## the subTABS are adressed via an uiOutput() 
sidebar <- dashboardSidebar (
  ##
  sidebarMenu(
    menuItem("TAB1",menuSubItem(uiOutput("Sidebar_sub1")) ),
    menuItem("TAB2",menuSubItem(uiOutput("Sidebar_sub2"))  ),
    menuItem("TAB3",menuSubItem(uiOutput("Sidebar_sub3"))  ) )
) 
##
server <- function(input, output) {
  ## starting parameters
  nsubtabs    <- 9
  tabnames <- paste0("subtab",1:nsubtabs)
  ## set up a list for all subtabs
  Menus_sub <- vector("list", nsubtabs)
  for(i in 1:nsubtabs) {
    Menus_sub[[i]] <- menuSubItem(tabnames[i], tabName = tabnames[i]) }
  ## use renderUI to create sidebar-output
  output$Sidebar_sub1 <- renderUI({  
    do.call(function(...) sidebarMenu(id = "sidebarMenu_sub1", ...), Menus_sub[1:3])
  })
  ##
  output$Sidebar_sub2 <- renderUI({  
    do.call(function(...) sidebarMenu(id = "sidebarMenu_sub2", ...), Menus_sub[4:6])
  })
  ##
  output$Sidebar_sub3 <- renderUI({  
    do.call(function(...) sidebarMenu(id = "sidebarMenu_sub3", ...), Menus_sub[7:9])
  })
  ##
}
##
ui <- dashboardPage(dashboardHeader(title = "Title2"), sidebar,body)
##
shinyApp(ui, server)

 

Ответ №1:

Я нашел решение: замените uiOutput() в sidebarMenu() на dropdownMenuOutput(), например:

 sidebar <- dashboardSidebar (
  ##
  sidebarMenu(
    menuItem("TAB1",menuSubItem(dropdownMenuOutput("Sidebar_sub1")) ),
    menuItem("TAB2",menuSubItem(dropdownMenuOutput("Sidebar_sub2"))  ),
    menuItem("TAB3",menuSubItem(dropdownMenuOutput("Sidebar_sub3"))  ) )
) 

 

Похоже, что после этого изменения меню, которые создаются динамически, помещаются в выпадающий список вместо перехода в отдельные элементы меню. Теперь все хорошо!

Спасибо, Грегор