Отображать второе меню, когда в блестящей панели инструментов выбран пункт меню - PullRequest
0 голосов
/ 03 апреля 2019

У меня блестящая приборная панель, а в боковой панели у меня есть два меню. У первого есть два предмета, а у второго - пять.

Когда приборная панель загружает первый пункт «Домой» в первом меню, он выбирается по умолчанию. Когда выбран второй элемент, отображается второе меню.

Мне удалось показать второе меню, но первое меню возвращается к пункту меню «Домой». Вы можете просто щелкнуть любой из пунктов во втором меню, но первое меню всегда возвращается к домашнему элементу при выборе второго элемента. Я хочу, чтобы он оставался на втором элементе, когда он был выбран, и в основном использую два меню, как если бы они были одним.

Я не хочу, однако, чтобы второе меню было подменю, поскольку это не так.

Ниже приведен некоторый фиктивный код, отображающий проблему.

library(shiny)
library(shinydashboard)

ui <- dashboardPage(skin = "blue", title = "",
                    dashboardHeader(),
                    dashboardSidebar(
                      sidebarMenu(id="fMenu", sidebarMenuOutput("firstMenu")),
                      sidebarMenu(id = "eMenu", sidebarMenuOutput("extendedMenu"))
                      ),
                    dashboardBody()
)

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



  output$firstMenu <- renderMenu({
    menu_list <- list(
      menuItem("Home", tabName = "home", icon = icon("home")),
      menuItem("2nd Item", tabName = "second", icon = icon("sort"))
    )

    sidebarMenu(.list = menu_list)
  })

  isolate({updateTabItems(session, "featureMenu", "home")})

  observeEvent(input$fMenu, {
    if(input$fMenu == "second"){
      output$extendedMenu <- renderMenu({
        menu_list <- list(
          menuItem("3rd Item", tabName = "third", icon = icon("sort")),
          menuItem("4th Item", tabName = "fourth", icon = icon("sort")),
          menuItem("5th Item", tabName = "fifth", icon = icon("sort"))
        )

        sidebarMenu(.list = menu_list)
      })
    }
  })

})

shinyApp(ui, server)

1 Ответ

1 голос
/ 03 апреля 2019

Повторное отображение меню заставляет его повторно выбрать первую вкладку. Вы можете использовать аргумент selected в вашем menuItem, чтобы сохранить выбранную вкладку seond. Однако в этом случае у вас должен быть только один sidebarMenu и один sidebarMenuOutput.

Рабочий пример

library(shiny)
library(shinydashboard)

ui <- dashboardPage(skin = "blue", title = "",
                    dashboardHeader(),
                    dashboardSidebar(
                      sidebarMenu(id="fMenu", 
                                  sidebarMenuOutput("firstMenu"))
                    ),
                    dashboardBody()
)

server <- (function(input, output, session) {
  output$firstMenu <- renderMenu({
    menu_list <- list(
      menuItem("Home", tabName = "home", icon = icon("home")),
      menuItem("2nd Item", tabName = "second", icon = icon("sort"))
    )
    sidebarMenu(.list = menu_list)
  })

  observeEvent(input$fMenu, {
    if(input$fMenu == "second"){
      output$firstMenu <- renderMenu({
        menu_list <- list(
          menuItem("Home", tabName = "home", icon = icon("home")),
          menuItem("2nd Item", tabName = "second", icon = icon("sort"), selected=T),
          menuItem("3rd Item", tabName = "third", icon = icon("sort")),
          menuItem("4th Item", tabName = "fourth", icon = icon("sort")),
          menuItem("5th Item", tabName = "fifth", icon = icon("sort"))
        )

        sidebarMenu(.list = menu_list)
      })

    }
  })
})

shinyApp(ui, server)
...