Я никогда не пытался использовать коробки, прежде чем это иметь в виду, что мой ответ может быть очень узко мыслите. Но я быстро посмотрел, и похоже, что просто установка класса «свернутая коробка» на коробке фактически не делает коробку краха. Поэтому вместо этого моя следующая мысль состояла в том, чтобы на самом деле нажать кнопку свернуть программно.
Как вы сказали, идентификатор, связанный с ящиком, не содержит идентификатора, поэтому мое решение заключалось в том, чтобы добавить аргумент id
в box
. Сначала я ожидал, что это будет идентификатор поля, но вместо этого он выглядит так, что идентификатор присваивается элементу внутри поля. Нет проблем - это просто означает, что для того, чтобы выбрать кнопку свернуть, нам нужно взять идентификатор, найти дерево DOM, чтобы найти элемент box, а затем оглянуться назад на дерево DOM, чтобы найти кнопку.
Надеюсь, все, что я сказал, имеет смысл. Даже если это не так, этот код должен еще работать, и мы надеемся сделать вещи немного более ясно :)
library(shiny)
library(shinydashboard)
library(shinyjs)
jscode <- "
shinyjs.collapse = function(boxid) {
$('#' + boxid).closest('.box').find('[data-widget=collapse]').click();
}
"
ui <- dashboardPage(
dashboardHeader(),
dashboardSidebar(),
dashboardBody(
useShinyjs(),
extendShinyjs(text = jscode),
actionButton("bt1", "Collapse box1"),
actionButton("bt2", "Collapse box2"),
br(), br(),
box(id = "box1", collapsible = TRUE, p("Box 1")),
box(id = "box2", collapsible = TRUE, p("Box 2"))
)
)
server <- function(input, output) {
observeEvent(input$bt1, {
js$collapse("box1")
})
observeEvent(input$bt2, {
js$collapse("box2")
})
}
shinyApp(ui, server)
Спасибо @daattali работает !, Также спасибо за очень полезные shinyjs. – Geovany