shinydashboard: menuSubItem не рендерится при запуске в случае нескольких menuSubItems - PullRequest
0 голосов
/ 08 октября 2018

Я обнаружил, что содержимое menuSubItem не отображается в случае нескольких (более одного) tabItems.

Ниже приведен минимальный пример, демонстрирующий это поведение.

Требуемое поведение - показать содержимоеtabItem помечен как selected = TRUE при запуске.Теперь содержимое отображается только после переключения между menuSubItems на боковой панели.

Как я могу заставить его работать?

library(shiny)
library(shinydashboard)

ui <- dashboardPage(
  dashboardHeader(title = "MINIMAL EXAMPLE"),
  dashboardSidebar(
    sidebarMenuOutput("menu")
  ),
  dashboardBody(
    uiOutput("body")
  )
)

server <- function(input, output, session) {

  output$menu <- renderMenu(
    sidebarMenu(
        menuItem(text = "TABS", tabName = "TABS", startExpanded = T,
                 menuSubItem(text = "tab1", tabName="tab1",
                             icon = icon("cube"), selected = TRUE),
                 menuSubItem(text = "tab2", tabName="tab2",
                             icon = icon("cube"), selected = FALSE)
        )
   )
  )

  output$body <- renderUI({
    tabItems(
      tabItem(tabName = "tab1", 
              h4("MY TEXT 1")
      ),
      tabItem(tabName = "tab2", 
              h4("MY TEXT 2")
      ))
  })
}

shinyApp(ui = ui, server = server)

1 Ответ

0 голосов
/ 10 октября 2018

Действительно, размещение элементов интерфейса непосредственно в интерфейсе решает проблему.Но подход к размещению всего внутри пользовательского интерфейса ограничен ситуациями, в которых не используются реактивные значения.Как я понимаю, передача реактивного значения от сервера к пользовательскому интерфейсу вообще невозможна (или ограничена особыми случаями).Пожалуйста, исправьте, если я ошибаюсь ... Спасибо

library(shiny)
library(shinydashboard)

ui <- dashboardPage(
  dashboardHeader(title = "MINIMAL EXAMPLE"),
  dashboardSidebar(
    sidebarMenuOutput("menu")
  ),
  dashboardBody(
    tabItems(
      tabItem(tabName = "tab1", 
              h4("MY TEXT 1")
      ),
      tabItem(tabName = "tab2", 
              h4("MY TEXT 2")
      ))
  )
)

server <- function(input, output, session) {

  output$menu <- renderMenu(
    sidebarMenu(
        menuItem(text = "TABS", tabName = "TABS", startExpanded = T,
                 menuSubItem(text = "tab1", tabName="tab1",
                             icon = icon("cube"), selected = TRUE),
                 menuSubItem(text = "tab2", tabName="tab2",
                             icon = icon("cube"), selected = FALSE)
        )
    )
  )
}

shinyApp(ui = ui, server = server)
...