2017-12-18 1 views
1

Wenn ein dynamisches Eingabeelement zur Benutzeroberfläche hinzugefügt wird, löst es sein bereits vorhandenes observeEvent aus. Beachten Sie insbesondere das folgende Beispiel, in dem der TextInput beim ersten Laden der serverseitigen Funktion dynamisch hinzugefügt wird. Dann wird das observeEvent ausgelöst, wenn es gerendert wird.So vermeiden Sie das Ausführen von initial observeEvent der dynamisch hinzugefügten Eingabe

Gibt es einen Weg, in dem wir diese Auslösung beim Hinzufügen des Eingangselementes generisch vermeiden können, insbesondere möchte ich Testeingang 1 und Testeingang 2 zwei auf ähnliche Weise feuern, das heißt, nicht bei der Initiierung.

Die UI.R Datei

library(shiny) 

# Define UI for application that draws a histogram 
shinyUI(fluidPage(

fluidRow(
    uiOutput("my_output"), 
    textInput(inputId = "test2", label = "test2", value = "start value")) 

)) 

Die server.R Datei

library(shiny) 

first.load <- TRUE 
shinyServer(function(input, output) { 

    if(first.load){ 
    output$my_output <- renderUI({ 
     textInput(inputId = "test", label = "test", value = NULL) 
    }) 
    } 

    observeEvent(input$test2,{ 
    browser() 
    }, ignoreInit = T) 

    observeEvent(input$test, { 
    browser() 
    }, ignoreInit = T) 
}) 
+0

Hatte das gleiche Problem einmal, mit einigen Javascript, die die Eingabe erstellt. – agenis

Antwort

0

obServeEvent Die auf die Anwesenheit von input$test reagiert. Also, wenn es mit einer value = "" initialisiert wird die observeEvent wird ausgelöst, da "" ist immer noch ein Nicht-Null-Wert. Als schnelle Lösung können Sie die observeEvent in einer logischen wickeln nur ausgeführt werden, wenn input$test nicht gleich "" ist:

observeEvent(input$test, { 
    if (!input$test == ""){ 
     browser() 
    } 
    }, ignoreInit = T) 
}) 
+0

Auch wenn ich keinen Wert angeben oder NULL angeben, wird es ausgelöst. Aber das wäre eigentlich neben meiner Frage. Ich möchte, dass das dynamische Hinzufügen eines solchen Elements so funktioniert, als wäre es vorbestimmt. –

Verwandte Themen