2013-06-18 6 views
9

erlebe ich Schwierigkeiten mit glänzendem Paket in R.Shiny - Probleme mit renderUI() 's Reaktivität

Ich versuche, warum "# Option 1" in server.R zu verstehen, nicht funktioniert, sondern kommentierte: „# Option 2 "funktioniert. Wenn "# Option 1" aktiv ist, versuchen Sie eine zufällige Zeichenfolge einzugeben und drücken Sie die Taste. Beim ersten Mal ersetzt er die Werte in der Textbox durch "abc", aber alle folgenden Male nicht.

In meinem Verständnis ist val() bereits abhängig von Eingabe $ ändern, so muss es jedes Mal erneut ausgeführt werden, wenn die Taste gedrückt wird, außerdem "# Option 2" ist in isolate() gewickelt, so dass es nicht hinzufügen jede Reaktivität.

Es scheint, dass sich der Wert teilweise zu "abc" ändert, wenn "# Option 1" verwendet wird. Wenn Sie das inspect-Element von Google Chrome öffnen, können Sie sehen, dass "# Option 2" die Werte jedes Mal ändert, wenn die Schaltfläche gedrückt wird. "# Option 1" ändert auch den Wert in "abc", aber der Bildschirm wird nur aktualisiert, wenn die Schaltfläche angezeigt wird wird zum ersten Mal gedrückt. Hier

ist der Code:

server.R

require(shiny) 

shinyServer(function(input, output) { 

    val <- reactive({ 
    if(input$change>0) { 
    # Option 1 
     'abc' 
#  # Option 2 
#  isolate({ 
#   paste('abc',input$txt,"") 
#  }) 
    } else { 
     '' 
    } 
    }) 

    output$textbox <- renderUI({ 
    textInput("txt","Text",val()) 
    }) 

}) 

ui.R

require(shiny) 
require(shinyIncubator) 

shinyUI(pageWithSidebar(
    headerPanel('Test'), 

    sidebarPanel(
    uiOutput("textbox"), 
    actionButton("change", "Change") 
), 

    mainPanel(

) 
)) 

Antwort

4

Siehe meine Antwort hier:

https://groups.google.com/d/msg/shiny-discuss/PLHauRlFw3k/AnoD7NusvDIJ

Der Kern ist, dass der Server genau den gleichen Wert an die textbox das Senden der Ausgabe hält, so dass der Kunde ist „smart“ genug, um es zu ignorieren.

+0

Danke! Ich löste das Problem, indem ich ein Leerzeichen am Ende des Texteingabewerts hinzufügte und ein Leerzeichen löschte, wenn der Eingabewert am Ende ein Leerzeichen hatte, so dass sich der neue Wert immer vom vorherigen unterscheidet. Ich trimme trotzdem alle eingehenden Saiten. – user1603038

1

Dieses sieht wie es könnte ein Fehler in dort irgendwo versteckt sein, aber ich kann Verfolge es nicht.

Die gute Nachricht ist, ich denke, Sie sollten in der Lage sein, diesen Effekt mit der updateTextInput Funktion zu erreichen.

Für einen tieferen Blick auf das Problem habe ich jedoch einen Fehler dafür erstellt. https://github.com/rstudio/shiny/issues/181. Ich werde versuchen, diesen Beitrag zu aktualisieren, wenn wir herausfinden, was vor sich geht.

Verwandte Themen