Se nella mia app lucida sono presenti più actionButt generati dinamicamente, c'è un modo per sapere quale actionButton è stato cliccato ed eseguire alcuni calcoli con l'ID del pulsante su cui si è fatto clic?Gestione di clic di più azioni Pulsanti in un'app lucida
risposta
Ho avuto un problema simile, anche se i pulsanti non sono generati dinamicamente nel mio caso. Non è chiaro dalla domanda se l'accento è posto sull'aspetto "generato dinamicamente". Se è così la mia risposta non ti aiuta molto ...
Per semplificare la mia risposta ho ridurre il problema al seguente:
- Ho due
actionButtons
nel mio UI (id="increase"
eid="decrease"
) e ho un variabile intera (var
) e testo (id="actual_value"
) per mostrare il valore effettivo. Uno dei pulsanti dovrebbe aumentare il valore di uno l'altro dovrebbe diminuirlo e ovviamente l'output dovrebbe mostrare il valore aggiornato.
La soluzione è:
shinyServer(function(input, output, session) {
increase <- reactive({
if(input$increase == 0) return()
var <- var + 1
})
decrease <- reactive({
if(input$decrease == 0) return()
var <- var - 1
})
actual.value <- reactive({
increase()
decrease()
var
})
output$actual_value <- renderText({
paste("Actual value is: ", actual.value())
})
})
Quindi la spiegazione è che ci sono due ingressi reattivi (cioè, i pulsanti), e due corrispondenti espressioni reattivi (increase
e decrease
). Una terza espressione reattiva (actual.value
) dipende dai primi due e restituisce il valore effettivo di var
. L'uscita reattiva dipende da questo.
in modo da creare due espressioni reattive separate per i due pulsanti (increase
e decrease
) e poi multiplex loro nel terzo (actual.value
).
Questo funziona, tuttavia non so se questo è l'approccio migliore per risolvere un problema del genere.