renderMenu, приводящий к странному форматированию, R Shiny Dashboard - PullRequest
1 голос
/ 02 октября 2019

Я создаю меню боковой панели на сервере моего приложения Shiny, но форматирование меню, созданного сервером, не соответствует меню, созданному в пользовательском интерфейсе.

Я попробовал некоторые функции hide / show световых эффектов после назначения div () для меню, которое также заканчивается странным, несоответствующим форматом. Я думаю, что renderMenu - лучший путь. Я бы предпочел не «взламывать» CSS, но любая помощь приветствуется.

Вот рабочий скрипт:

library(shiny)
library(shinydashboard)

ui <- dashboardPage(
  dashboardHeader(title = 'Header'),
  dashboardSidebar(
    sidebarMenu(
      menuItem('First Menu', tabName = 'first_menu'),
        menuSubItem('sub1', tabName = 'sub_1'),
        menuSubItem('sub2', tabName = 'sub_2'),
      uiOutput('server_menu')
    )
  ),
  dashboardBody()
)

server <- function(input, output) {

  output$server_menu <- renderMenu({
    list(
      menuItem('Second Menu', tabName = 'second_menu'),
               menuSubItem('sub3', tabName = 'sub_3'),
               menuSubItem('sub4', tabName = 'sub_4')
              )
  }) 

}

shinyApp(ui, server)

, который дает такой результат:

enter image description here

Любой совет о том, как я могу решить эту проблему, был бы потрясающим! Приветствия

1 Ответ

1 голос
/ 02 октября 2019

Вместо uiOutput используйте menuItemOutput. Кроме того, ваша иерархия menuItem и menuSubItem кажется неверной. menuSubItem должно быть потомком menuItem

library(shiny)
library(shinydashboard)

ui <- dashboardPage(
    dashboardHeader(title = 'Header'),
    dashboardSidebar(
        sidebarMenu(
            menuItem(
                'First Menu', 
                tabName = 'first_menu',
                menuSubItem('sub1', tabName = 'sub_1'),
                menuSubItem('sub2', tabName = 'sub_2')
            ),
            menuItemOutput('server_menu') # Changed from uiOuput to menuItemOutput
        )
    ),
    dashboardBody()
)

server <- function(input, output) {

    output$server_menu <- renderMenu({
        list(
            # modified hierarchies
            menuItem(
                'Second Menu', 
                tabName = 'second_menu',
                menuSubItem('sub3', tabName = 'sub_3'),
                menuSubItem('sub4', tabName = 'sub_4')
            )
        )
    }) 

}

shinyApp(ui, server)

enter image description here

...