2013-06-18 4 views
9

mam trudności z pakietu Błyszczące w R.Błyszczące - problemy z renderUI() 's reaktywności

Próbuję zrozumieć, dlaczego «# Opcja 1» w server.R nie działa, ale powiedział: „# Opcja 2 "działa. Gdy aktywny jest "# Option 1", spróbuj wpisać losowy ciąg znaków i nacisnąć przycisk. Pierwszy raz zastępuje wartości w polu tekstowym przez "abc", ale wszystkie następne czasy nie.

W moim rozumieniu val() jest już zależny od wejścia $ change, więc musi być ponownie uruchamiany za każdym naciśnięciem przycisku, ponadto "# Option 2" jest zawijany do isolate(), więc nie dodaje dowolna reaktywność.

Wygląda na to, że w rzeczywistości wartość częściowo zmienia się na "abc", gdy używana jest "# opcja 1". Po otwarciu elementu inspekcji Google Chrome widać, że "# Option 2" zmienia wartości za każdym naciśnięciem przycisku, "# Option 1" również zmienia wartość na "abc", ale ekran jest aktualizowany tylko wtedy, gdy przycisk jest wciśnięty po raz pierwszy.

Oto kod:

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(

) 
)) 

Odpowiedz

4

Zobacz moją odpowiedź tutaj:

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

Istotą jest to, że serwer zachowuje wysyłania dokładnie taką samą wartość do wyjścia textbox, więc klient jest „inteligentna” wystarczy, aby go zignorować.

+0

Dzięki! Rozwiązałem problem, dodając spację na końcu wartości wejściowej tekstu i usuwając spację, jeśli wartość wejściowa ma spację na końcu, więc nowa wartość będzie zawsze inna niż poprzednia. W każdym razie przycinam cały przychodzący ciąg. – user1603038

1

To wygląda jak tam może być błąd ukryty gdzieś tam, ale mogę "Śledzić to.

Dobrą wiadomością jest, myślę, że powinieneś być w stanie osiągnąć ten efekt za pomocą funkcji updateTextInput.

W celu dokładniejszego przyjrzenia się problemowi, jednak stworzyłem błąd. https://github.com/rstudio/shiny/issues/181. Spróbuję zaktualizować ten post, jeśli/kiedy zorientujemy się, co się dzieje.

Powiązane problemy