मेरा प्रश्न चमकदार बीएस में bsCollapsePanel में शीर्षलेख के टॉगलिंग और अनटॉगलिंग की घटना को देखने से संबंधित है।

आइए निम्नलिखित ऐप को एक उदाहरण के रूप में देखें:

library(shiny)
library(shinyBS)
server = function(input, output, session) {
    observeEvent(input$p1Button, ({
      updateCollapse(session, "collapseExample", open = "Panel 1")
    }))
    observeEvent(input$styleSelect, ({
      updateCollapse(session, "collapseExample", style = list("Panel 1" = input$styleSelect))
    }))
    output$randomNumber <- reactive(paste0('some random number'))
  }


ui = fluidPage(
  sidebarLayout(
    sidebarPanel(HTML("This button will open Panel 1 using <code>updateCollapse</code>."),
                 actionButton("p1Button", "Push Me!"),
                 selectInput("styleSelect", "Select style for Panel 1",
                             c("default", "primary", "danger", "warning", "info", "success"))
    ),
    mainPanel(
      bsCollapse(id = "collapseExample", open = "Panel 2",
                 bsCollapsePanel("Panel 1", "This is a panel with just text ",
                                 "and has the default style. You can change the style in ",
                                 "the sidebar.", style = "info")
      ),
      verbatimTextOutput('randomNumber')
    )
  )
)

app = shinyApp(ui = ui, server = server)

मैं चाहता हूं कि ऐप verbatimTextOutput('randomNumber') फ़ील्ड में एक यादृच्छिक संख्या (R चमकदार प्रतिक्रियाशीलता का उपयोग करके) प्रिंट करने में सक्षम हो, जब भी मैं bsCollapsePanel को Panel 1 हेडर पर क्लिक करके खोलता हूं।

मैं सोच रहा था कि shinyjs पैकेज का उपयोग करना संभव हो सकता है लेकिन इन दोनों पैकेजों के एक साथ उपयोग किए जाने के कई उदाहरण नहीं मिले हैं।

1
user974514 19 अप्रैल 2017, 20:46

2 जवाब

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

मुझे पूरा यकीन नहीं है कि आप क्या चाहते हैं, लेकिन यह करीब हो सकता है। ये जोड़ हैं:

  • आपके Panel 1 शीर्षलेख की निगरानी के लिए एक observeEvent जोड़ा गया।
  • "यादृच्छिक संख्या" रखने के लिए एक reactiveValues जोड़ा गया
  • जब Panel 1 को पुश किया जाता है, तो उपरोक्त observeEvent हैंडलर में उस मान को बढ़ा दिया जाता है।

यहाँ कोड है:

library(shiny)
library(shinyBS)
server = function(input, output, session) {
  rv <- reactiveValues(number=0)
  observeEvent(input$p1Button, ({
    updateCollapse(session, "collapseExample", open = "Panel 1")
  }))
  observeEvent(input$styleSelect, ({
    updateCollapse(session, "collapseExample", style = list("Panel 1" = input$styleSelect))
  }))
  observeEvent(input$collapseExample, ({
    rv$number <- rv$number+1
  }))
  output$randomNumber <- reactive(rv$number)
}


ui = fluidPage(
  sidebarLayout(
    sidebarPanel(HTML("This button will open Panel 1 using <code>updateCollapse</code>."),
                 actionButton("p1Button", "Push Me!"),
                 selectInput("styleSelect", "Select style for Panel 1",
                           c("default", "primary", "danger", "warning", "info", "success"))
    ),
    mainPanel(
      bsCollapse(id = "collapseExample", open = "Panel 2",
                 bsCollapsePanel("Panel 1", "This is a panel with just text ",
                                 "and has the default style. You can change the style in ",
                                 "the sidebar.", style = "info")
      ),
      verbatimTextOutput('randomNumber')
    )
  )
)
shinyApp(ui = ui, server = server)

और एक स्क्रीन शॉट:

enter image description here

1
Mike Wise 19 अप्रैल 2017, 21:36

ठीक है, माइक वाइज मुझसे तेज था :) अगर किसी कारण से मेरा समाधान भी मददगार है तो मुझे बताएं अन्यथा मैं इसे हटा देता हूं।

library(shiny)
library(shinyjs)
library(shinyBS)

ui = fluidPage(
  useShinyjs(),
  sidebarLayout(
    sidebarPanel(HTML("This button will open Panel1 using <code>updateCollapse</code>."),
                 actionButton("p1Button", "Push Me!"),
                 selectInput("styleSelect", "Select style for Panel1",
                             c("default", "primary", "danger", "warning", "info", "success"))
    ),
    mainPanel(
      bsCollapse(id = "collapseExample", open = "Panel 2",
                 bsCollapsePanel("Panel1", "This is a panel with just text ",
                                 "and has the default style. You can change the style in ",
                                 "the sidebar.", style = "info", id = "me23")
      ),
      verbatimTextOutput('randomNumber')
    )
  )
)

server = function(input, output, session) {
  observeEvent(input$p1Button, ({
    updateCollapse(session, "collapseExample", open = "Panel1")
  }))
  observeEvent(input$styleSelect, ({
    updateCollapse(session, "collapseExample", style = list("Panel1" = input$styleSelect))
  }))

  observe({
    runjs("function getAllElementsWithAttribute(attribute){
              var matchingElements = [];
              var allElements = document.getElementsByTagName('*');
              for (var i = 0, n = allElements.length; i < n; i++)
              {
              if (allElements[i].getAttribute(attribute) !== null)
              {
              // Element exists with attribute. Add to array.
              matchingElements.push(allElements[i]);
              }
              }
              return matchingElements;
              };
              ahref = getAllElementsWithAttribute('data-toggle');
              ahref[0].onclick = function() { 
                var nmbr = Math.random();
                Shiny.onInputChange('randomNumber', nmbr);
              };
          ")
  })
  output$randomNumber <- reactive(paste0(input$randomNumber))
}




shinyApp(ui = ui, server = server)

जावास्क्रिप्ट कोड आप यहां पा सकते हैं: जब querySelectorAll नहीं है तो विशेषता के आधार पर तत्व प्राप्त करें पुस्तकालयों का उपयोग किए बिना उपलब्ध है?

2
Community 23 मई 2017, 14:47