【发布时间】:2019-08-07 15:35:45
【问题描述】:
基于这个问题R shinyjs shinydashboard box uncollapse on action button input 和问题How to manually collapse a box in shiny dashboard,我想用radioButtons(或selectInput)替换actionButton。下面是一个可重现的例子。当我单击是时,我希望框 id=B2 和 id=B3 折叠,当我单击否时,框 id =B1 和 id =B3 折叠,当单击可能时,框 id=B1 和 id=B2 折叠。使用下面的代码,有一个崩溃,但它没有按预期工作。
library(shiny)
library(shinyBS)
library(dplyr)
library(shinydashboard)
# javascript code to collapse box
jscode <- "
shinyjs.collapse = function(boxid) {
$('#' + boxid).closest('.box').find('[data-widget=collapse]').click();
}
"
#Design sidebar
sidebar <- dashboardSidebar(width = 225, collapsed=F,
sidebarMenu(id="tabs",
menuItem("zz", tabName = "zz", selected=TRUE)))
#Design body
body <- dashboardBody(shinyjs:::useShinyjs(),
shinyjs:::extendShinyjs(text = jscode),
tabItems(
tabItem(tabName = "zz",
fluidRow(box(radioButtons('go','Go', choices = c("yes", "no", "maybe"))),
box(id="B1", collapsible=T, status = "primary", color="blue", solidHeader = T,
title="Test"),
box(id="B2", collapsible=T, status = "primary", color="blue", solidHeader = T,
title="Test2"),
box(id="B3", collapsible=T, status = "primary", color="blue", solidHeader = T,
title="Test3")
))
))
Header <- dashboardHeader()
#Show title and the page (includes sidebar and body)
ui <- dashboardPage(Header, sidebar, body)
server <- shinyServer(function(input, output, session){
observeEvent(input$go == "yes",
{js$collapse("B2", "B3")}
)
#
observeEvent(input$go == "no",
{js$collapse("B1", "B3")}
)
observeEvent(input$go == "maybe",
{js$collapse("B1", "B2")}
)
})
shinyApp( ui = ui, server = server)
【问题讨论】:
-
您的折叠功能有效。要检查框是否折叠,您可以使用此处描述的功能:stackoverflow.com/questions/45462614/…
-
@Wilmar van Ommeren,是的,有一个崩溃,但它没有按预期工作。 For example, when yes is selected, only id=B2 and id=B3 should be collapsed.因为它是 id=B3 没有崩溃。
-
这是因为此功能不会折叠框,而是切换它们。因此,如果一个盒子已经折叠,它将打开而不是保持折叠状态。因此,您应该添加一个检查框是否已折叠的函数。
-
@Wilmar van Ommeren。您提供的链接告诉它是否已折叠。我添加了代码,但是如何实现这个功能来帮助我解决我的问题。我对JS一无所知。