क्या किसी को पता है कि क्या मैं bsplus :: bs_accordion में एक अकॉर्डियन की तह पर क्लिक ईवेंट देखने के लिए एक अवलोकन () का उपयोग कर सकता हूं?

यही है जो मेरा मतलब है....

मेरे पास मेरे चमकदार ऐप में bsplus लाइब्रेरी से bs_accordion() नियंत्रण है। अकॉर्डियन के प्रत्येक "फोल्ड" में ऐसी सामग्री होती है जिसे uiOutput() फ़ंक्शन के साथ गतिशील रूप से सेट किया जा रहा है:

      bs_accordion(id = "measures") %>%
        bs_set_opts(use_heading_link = TRUE) %>%
        bs_append(
          title = "Measures 1",
          content = uiOutput("measure1_ctrl")
        ) %>%
        bs_append(
          title = "Measures 2",
          content = uiOutput("measure2_ctrl")
        ) %>%
        bs_append(
          title = "Measures 3",
          content = uiOutput("measure3_ctrl")
        )

अकॉर्डियन की प्रत्येक तह (uiOuput()) के भीतर की सामग्री इस तरह बनाई जाती है:

  output$measure1_ctrl <- renderUI({
    measure1 <- dashboard_master %>%
      filter(major_outcome == "1") %>%
      select(MeasureId) %>%
      deframe() %>%
      unique()
    radioButtons("measure1",
      label = NULL,
      choices = measure1
    )
  })

मैं इस तरह के अकॉर्डियन कोड के भीतर "माप1" के लिए radioButons में परिवर्तन देखने के लिए observeEvent() का उपयोग कर सकता हूं:

  observeEvent(input$measure1, {
    outcome_reactive$outcome <- input$measure1
  })

जो मैं समझ नहीं पा रहा हूं, क्या मैं एक observeEvent() का उपयोग करके देख सकता हूं कि अकॉर्डियन को चुना/अनफोल्ड किया जाना है (इससे पहले कि कोई रेडियो बटन क्लिक करे)? मुझे लगता है कि एक क्लिक घटना हो रही है लेकिन मुझे नहीं पता कि इसे क्या कहा जाता है। इसलिए, मुझे नहीं पता कि इसे observeEvent() में कैसे रखा जाए।

1
itsMeInMiami 31 जुलाई 2020, 19:29

1 उत्तर

सबसे बढ़िया उत्तर

जैसा कि टिप्पणियों में बताया गया है, आपको इसे हल करने के लिए कुछ JS का उपयोग करने की आवश्यकता है। यहां एक न्यूनतम उदाहरण दिया गया है:

library(bsplus)
library(shiny)

ui <- fluidPage(
   tags$script(HTML("$(function() {$('.panel').on('click', function() {Shiny.setInputValue('alert', this.id);})})")),
   fluidRow(
      bs_accordion(id = "measures") %>%
         bs_set_opts(use_heading_link = TRUE) %>%
         bs_append(
           title = "Measures 1",
           content = uiOutput("measure1_ctrl")
         ) %>%
         bs_append(
           title = "Measures 2",
           content = uiOutput("measure2_ctrl")
         ) %>%
         bs_append(
           title = "Measures 3",
           content = uiOutput("measure3_ctrl")
         ),
       verbatimTextOutput("dbg")
   )
)

server <- function(input, output, session) {
   output$dbg <- renderPrint(input$alert)
}

shinyApp(ui, server)

मूल रूप से, आप click ईवेंट को panel क्लास में असाइन करते हैं, जो shiny (input$alert के माध्यम से) को बताता है कि कुछ क्लिक किया गया है।

यदि आप लगातार कॉल करना चाहते हैं तो आप setInputValue में एक यादृच्छिक संख्या जोड़ना चाह सकते हैं। मेरे खिलौने के उदाहरण में मैंने पैनल के id को वापस कर दिया, जिसे क्लिक किया गया था, लेकिन निश्चित रूप से आप जो चाहें वापस कर सकते हैं (और जावास्क्रिप्ट/jQuery आपको देता है)।

3
thothal 6 अगस्त 2020, 08:40