2015-08-19 1 views
3

Я пытаюсь свернуть коробку вручную, когда что-то произойдет. Кажется, мне нужно добавить класс "collapsed-box", я попытался использовать функцию shinyjs addClass, но я не знаю, как это сделать, потому что в поле нет id. Здесь, как и простой базовый код, который может быть использован для проверки возможных решений:Как вручную свернуть окно в блестящей приборной панели

library(shinydashboard) 

ui <- dashboardPage(
    dashboardHeader(), 
    dashboardSidebar(), 
    dashboardBody(
     box(collapsible = TRUE,p("Test")), 
     actionButton("bt1", "Collapse") 
) 
) 

server <- function(input, output) { 
    observeEvent(input$bt1, { 
    # collapse the box 
    }) 
} 

shinyApp(ui, server) 

ответ

8

Я никогда не пытался использовать коробки, прежде чем это иметь в виду, что мой ответ может быть очень узко мыслите. Но я быстро посмотрел, и похоже, что просто установка класса «свернутая коробка» на коробке фактически не делает коробку краха. Поэтому вместо этого моя следующая мысль состояла в том, чтобы на самом деле нажать кнопку свернуть программно.

Как вы сказали, идентификатор, связанный с ящиком, не содержит идентификатора, поэтому мое решение заключалось в том, чтобы добавить аргумент 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) 
+0

Спасибо @daattali работает !, Также спасибо за очень полезные shinyjs. – Geovany