#shiny #shinyjs
#блестящий #shinyjs
Вопрос:
Я создаю блестящее приложение и использую два sidebarLayout. Я ищу способ минимизировать их. Я попытался поместить каждый sidebarLayout в поле.
Пример кода:
library(shiny)
library(shinyjs)
ui <- fluidPage(
useShinyjs(),
headerPanel("Here goes the heder"),
box(sidebarLayout(
sidebarPanel(textOutput("someinputs")),
mainPanel(textOutput("someoutputs"))),
width = 12,
title = "BB",
collapsible = T,
collapsed = F
)
)
server <- function(input, output) {
output$someinputs <- renderText({
"Here will go the inputs"
})
output$someoutputs <- renderText({
"Here will go the outputs"
})
}
shinyApp(ui, server)
Вывод:
Когда я нажимаю кнопку сворачивания, макет не сворачивается. Почему это происходит? Что мне делать? Есть ли другой способ сделать это?
Ответ №1:
Потому что вы не использовали shinydashboard
. Коробка поставляется из shinydashboard
пакета. Вам нужно использовать shinydashboard::dashboardPage
вместо fluidPage
. dashboardPage
Загружает необходимые javascripts и CSS-файлы для переключения кнопки.
library(shiny)
ui <- shinydashboard::dashboardPage(
shinydashboard::dashboardHeader(),
shinydashboard::dashboardSidebar(),
shinydashboard::dashboardBody(
headerPanel("Here goes the heder"),
shinydashboard::box(
width = 12,
title = "BB",
collapsible = TRUE,
collapsed = FALSE,
sidebarLayout(
sidebarPanel(textOutput("someinputs")),
mainPanel(textOutput("someoutputs")))
)
)
)
Если вы не хотите использовать dashboardPage
, вы можете написать свои собственные сценарии для управления кнопкой:
library(magrittr)
library(shiny)
ui <- fluidPage(
headerPanel("Here goes the heder"),
shinydashboard::box(
width = 12,
title = "BB",
collapsible = TRUE,
collapsed = FALSE,
sidebarLayout(
sidebarPanel(textOutput("someinputs")),
mainPanel(textOutput("someoutputs")))
)%>% {.$attribs[['id']] <- 'example-box'; .},
tags$head(tags$script(
"$(document).ready(function(){
$('#example-box button').attr({
'data-toggle':'collapse',
'data-target':'#example-box .box-body',
'aria-expanded':false
})
})"
))
)
Я использовал хак, чтобы назначить идентификатор для окна %>% {.$attribs[['id']] <- 'example-box'; .}
и использовать некоторый jquery для управления кнопкой. Убедитесь, что идентификатор в скрипте соответствует идентификатору, который вы назначаете в пользовательском интерфейсе, example-box
в данном случае. В javascript вы добавляете #
для поиска идентификаторов, поэтому #example-box
.
Я бы не рекомендовал вам использовать второй способ. Вы можете видеть в своем пользовательском интерфейсе, что на самом деле это не коробка. У него нет границы, и кнопка находится не в нужном месте. Если вы используете dashboardPage
, вы можете увидеть разницу.