2013-06-18 9 views
9

ho avere difficoltà con il pacchetto lucido in R.Shiny - problemi con renderUI() 's reattività

che sto cercando di capire perché "# Opzione 1" in server.R non funziona, ma ha commentato: "# L'opzione 2 "funziona. Con "# Opzione 1" attiva provare a digitare una stringa casuale e premere il pulsante. La prima volta sostituisce i valori nella casella di testo con "abc", ma non tutte le volte successive.

Nella mia comprensione val() dipende già dall'input $ change, quindi deve essere eseguito nuovamente ogni volta che si preme il pulsante, inoltre "# Option 2" viene inserito in isolate(), quindi non aggiunge qualsiasi reattività.

Sembra che in realtà il valore cambi parzialmente in "abc" quando si utilizza "# Opzione 1". Dopo aver aperto l'elemento di ispezione di Google Chrome, puoi vedere che "Opzione # 2" cambia i valori di ogni volta che viene premuto il pulsante, "# Opzione 1" cambia anche il valore in "abc", ma lo schermo viene aggiornato solo quando il pulsante viene premuto per la prima volta.

Ecco il codice:

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(

) 
)) 

risposta

4

Vedi la mia risposta qui:

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

Il succo è che il server continua a inviare esattamente lo stesso valore al textbox uscita, in modo che il cliente è "intelligente" abbastanza per ignorarlo.

+0

Grazie! Ho risolto il problema aggiungendo uno spazio alla fine del valore di input del testo e rimuovendo uno spazio se il valore di input ha uno spazio alla fine, quindi il nuovo valore sarà sempre diverso da quello precedente. Ho comunque tagliato tutte le stringhe in arrivo. – user1603038

1

Questo fa apparire come ci potrebbe essere un bug nascosto da qualche parte, ma posso rintracciarlo

La buona notizia è, penso che dovresti essere in grado di ottenere questo effetto con la funzione updateTextInput.

Per uno sguardo più approfondito al problema, ho creato un bug per questo, tuttavia. https://github.com/rstudio/shiny/issues/181. Cercherò di aggiornare questo post se/quando scopriremo cosa sta succedendo.