2016-04-08 3 views
3

Как бы вы обернули menuitem в условной панели, чтобы он выглядел как остальные пункты меню?ConditionalPanel вокруг menuItem не отображается должным образом

Попробуйте нажать на B и посмотреть, как пункт меню C выглядит по сравнению с пунктами меню А или B -

library(shiny) 
library(shinydashboard) 

ui <- dashboardPage(
    dashboardHeader(), 
    dashboardSidebar(
    sidebarMenu(id = "sidebarmenu", 
     menuItem("A", tabName = "a", icon = icon("group", lib="font-awesome")), 
     menuItem("B", tabName = "b", icon = icon("check-circle", lib = "font-awesome")), 
     conditionalPanel("input.sidebarmenu === 'b'", 
     sliderInput("b", "Under sidebarMenu", 1, 100, 50) 
    ), 
     conditionalPanel("input.sidebarmenu === 'b'", 
     menuItem("C", tabName = "c", icon = icon("check-circle", lib = "font-awesome")) 
    ) 
    ) 
), 
    dashboardBody() 
) 

server <- function(input, output) {} 

shinyApp(ui, server) 

(Большая часть кода заимствована из - https://github.com/rstudio/shinydashboard/issues/28)

Я хотел бы решение не нужно возиться с CSS или некоторыми другими настройками фона.

+0

обернуть его внутри 'sidebarMenu()'? – tospig

+0

'sidebarMenu (conditionalPanel (" input.sidebarmenu === 'b' ", menuItem (" C ", tabName =" c ", icon = icon (" check-circle ", lib =" font-awesome ")) )) '? Не работает. – TheComeOnMan

+0

Извините, я имел в виду просто 'menuItem()' - 'sidebarMenu (menuItem (...))' – tospig

ответ

1

Решение, которое работает, чтобы обернуть menuItem внутри sidebarMenu() снова

library(shiny) 
library(shinydashboard) 

ui <- dashboardPage(
    dashboardHeader(), 
    dashboardSidebar(
    sidebarMenu(id = "sidebarmenu", 
       menuItem("A", tabName = "a", icon = icon("group", lib="font-awesome")), 
       menuItem("B", tabName = "b", icon = icon("check-circle", lib = "font-awesome")), 
       conditionalPanel("input.sidebarmenu === 'b'", 
           sliderInput("b", "Under sidebarMenu", 1, 100, 50) 
       ), 
       conditionalPanel("input.sidebarmenu === 'b'", 
           sidebarMenu(menuItem("C", tabName = "c", icon = icon("check-circle", lib = "font-awesome"))) 
       ) 
    ) 
), 
    dashboardBody() 
) 

server <- function(input, output) {} 

shinyApp(ui, server) 

Однако, после того, как делать немного исследований я не могу видеть почему это необходимо (я интересно, если это связано с this issue в некотором роде?

Если кто-то имеет подробное объяснение, я был бы благодарен услышать это :)

+0

Я предполагаю, что 'условная панель 'вычисляется после отображения всего. Поэтому в 'menuItem' будут отсутствовать теги CSS. 'sidebarMenu' добавляет эти дополнительные теги к элементу' menuItem', и это становится нормально. – wikiselev

0

на самом деле, в решении по @tospi g, подсветка активного пункта меню не работает. Я нашел это без проблем:

library(shiny) 
library(shinydashboard) 

ui <- dashboardPage(
    dashboardHeader(), 
    dashboardSidebar(
    conditionalPanel("input.sidebarmenu == 'b'", 
     sidebarMenu(id = "sidebarmenu", 
      menuItem("A", tabName = "a", icon = icon("group", lib="font-awesome")), 
      menuItem("B", tabName = "b", icon = icon("check-circle", lib = "font-awesome")), 
      sliderInput("b", "Under sidebarMenu", 1, 100, 50) 
      menuItem("C", tabName = "c", icon = icon("check-circle", lib = "font-awesome")) 
     ) 
    ), 
    conditionalPanel("input.sidebarmenu != 'b'", 
     sidebarMenu(id = "sidebarmenu", 
      menuItem("A", tabName = "a", icon = icon("group", lib="font-awesome")), 
      menuItem("B", tabName = "b", icon = icon("check-circle", lib = "font-awesome")) 
     ) 
    ) 
), 
    dashboardBody() 
) 

server <- function(input, output) {} 

shinyApp(ui, server)