2017-02-10 3 views
1

In Shiny werden die "observe" -Anweisungen beim Laden der App ausgeführt und ich möchte dies in einigen Fällen verhindern. Zum Beispiel könnte ich zwei Titel haben, die ich bei einem bestimmten Wert starten möchte und nach dem Laden der App möchte ich sie synchronisieren.Ausführung von "Beobachten" bei App-Laden verhindern in Shiny

Wenn Sie den Code unten ausführen, werden die Titel in einer Endlosschleife aktualisiert, da die App sofort einen Titel aktualisiert und dann den anderen aktualisiert. Wenn Sie einen der "ersten" Codeblöcke unten auskommentieren, scheinen beide Titel mit dem gleichen Wert zu beginnen. Wenn Sie beide Blöcke auskommentieren, wird es tun, was ich will - beginnen Sie mit einem vordefinierten Wert und synchronisieren Sie dann, wenn Änderungen vorgenommen werden.

Aber dieser Code ist verschachtelt und ich möchte keine if Anweisung in allen Beobachtern hinzufügen. Es muss einen einfacheren Weg geben. Beim Betrachten der Dokumente schien es, dass vielleicht suspended = TRUE und resume(), aber ich kann keine Beispiele finden.

Ich fragte eine related question und die Antwort für diese war ähnlich unelegant. Irgendwelche Gedanken?

library(shiny) 

first_time1 <<- TRUE 
first_time2 <<- TRUE 

server <- function(input, output, session) { 

    observeEvent(input$title1, { 
    # if(first_time1){ 
    # first_time1 <<- FALSE 
    # return() 
    # } 
    updateTextInput(session, "title2", value = input$title1) 

    }) 

    observeEvent(input$title2, { 
    # if(first_time2){ 
    # first_time2 <<- FALSE 
    # return() 
    # } 
    updateTextInput(session, "title1", value = input$title2) 
    }) 

} 

ui <- fluidPage(
    tabsetPanel(


    tabPanel("A", textInput("title1", "titleA", "This is the title A")), 
    tabPanel("B", textInput("title2", "titleB", "This is title B")) 
) 
) 


shinyApp(ui = ui, server = server) 
+0

was ist das Ziel dieser App? –

Antwort

1

Das, was Sie für ignoreInit ist gesucht haben. Siehe unten

observeEvent(input$title1, { 
    updateTextInput(session, "title2", value = input$title1) 
    }, ignoreInit = T) 

    observeEvent(input$title2, { 
    updateTextInput(session, "title1", value = input$title2) 
    }, ignoreInit = T) 
Verwandte Themen