2016-10-07 5 views
1

У меня есть очень простой shinydashboard код:shinydashboard боковой панели не в состоянии сворачиваются несколько вкладок

library(shiny) 
library(shinydashboard) 

ui <- dashboardPage(
    dashboardHeader(), 
    dashboardSidebar(
    sidebarMenu(id='tab1', 
     menuItem('tab 1', tabName='tab1', 
     menuSubItem('subtab 1', tabName='tab1subtab1'), 
     menuSubItem('subtab 2', tabName='tab1subtab2') 
    ), 
     menuItem('tab 2', tabName='tab2', 
     menuSubItem('subtab 1', tabName='tab2subtab1'), 
     menuSubItem('subtab 2', tabName='tab2subtab2') 
    ) 
    ), 
    tags$head(tags$script(HTML('$(document).ready(function() {$(".treeview-menu").css("display", "block");})'))) 
), 
    dashboardBody(
    tabItems(
     tabItem(tabName='tab1subtab1', 
     verbatimTextOutput('check11') 
    ), 
     tabItem(tabName='tab1subtab2', 
     verbatimTextOutput('check12') 
    ), 
     tabItem(tabName='tab2subtab1', 
     verbatimTextOutput('check21') 
    ), 
     tabItem(tabName='tab1subtab1', 
     verbatimTextOutput('check22') 
    ) 
    ) 
) 
) 

server <- function(input, output, session) { 
    observe(print(input$tab)) 

    output$check11 <- renderPrint(input$tab) 
    output$check12 <- renderPrint(input$tab) 
    output$check21 <- renderPrint(input$tab) 
    output$check22 <- renderPrint(input$tab) 
} 

shinyApp(ui, server) 

В приведенном выше коде, есть некоторые HTML, чтобы гарантировать, что tab опции развернут, когда приложение запускает. Однако, если пользователь сбрасывает одну из вкладок, а затем разворачивает ее, другая вкладка автоматически сворачивается. Это означает, что боковая панель не может вернуться к исходному состоянию обоих вкладок, которые не были вставлены. Как это можно зафиксировать?

ОБНОВЛЕНИЕ: Я немного изменил код с моего исходного сообщения. Эта новая версия имеет бит observe(print(input$tab)) для изменения вывода на основе выбранной вкладки. Ответ, представленный GyD ниже, отвечает на мой первоначальный вопрос, но он не позволяет мне поддерживать функциональность observe(print(input$tab)), которая мне нужна.

ответ

1

Это поведение не было вызвано кодом js, это как раз то, как sidebarMenu. Если выбрана вкладка, другая автоматически сбрасывается.

Пока я не знаю, как установить это с помощью JS или что-то, самое простое решение, я придумал, чтобы использовать 2 sidebarMenu -s вместо 1.

Опять же, это не может быть то, что вы» он ищет, но он должен решить проблему рушится.

Код:

library(shiny) 
library(shinydashboard) 

ui <- dashboardPage(
    dashboardHeader(), 
    dashboardSidebar(
    sidebarMenu(id='tab', 
       menuItem('tab 1', tabName='tab1', 
         menuSubItem('subtab 1', tabName='tab1subtab1'), 
         menuSubItem('subtab 2', tabName='tab1subtab2') 
       ) 
    ), 
    sidebarMenu(id='tab2', 
       menuItem('tab 2', tabName='tab2', 
         menuSubItem('subtab 1', tabName='tab2subtab1'), 
         menuSubItem('subtab 2', tabName='tab2subtab2') 
       ) 
    ), 
    tags$head(tags$script(HTML('$(document).ready(function() {$(".treeview-menu").css("display", "block");})'))) 
), 
    dashboardBody() 
) 

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

shinyApp(ui, server) 
+0

Спасибо! Достаточно легко. –

+0

На самом деле, у меня есть еще одна проблема с этим. В моем исходном коде моя функция «server» я позволил мне «наблюдать (print (input $ tab))», который я мог бы использовать для изменения действий на основе выбранной вкладки. Кажется, сейчас это невозможно. Я мог бы использовать 'наблюдать (print (input $ tab1))', но тогда это будет только для опций 'tab1subtab1' и' tab1subtab2', оставив 'tab2subtab1' и' tab2subtab2'. Есть ли способ обойти это? Будет ли решение js единственным способом исправить это? –

+0

Да, я не принимал во внимание, что если у вас есть 2 'sidebarMenu', тогда вы можете выбрать один элемент, который вам не нужен. Таким образом, этот подход - не выход. – GyD

Смежные вопросы