2016-05-02 2 views
2

Ich möchte eine App entwerfen, die optional auch Eingaben vom Client-Webbrowser übernehmen kann. Also, wenn meine URL ist www.something.com?text=myValue weiß ich, dass ich myValue mitIn glänzenden, ist es möglich, Eingabeauswahl basierend auf Client-Web-Browser-Eingabe zu aktualisieren?

query <- parseQueryString(session$clientData$url_search) 
if (!is.null(query[['text']])) { 
     query_text <<- query[['text']] 
} 

Diese einfache App von einem selectizeInput nimmt den Wert speichern kann und macht es in einem textOutput.

ui <- shinyUI(fluidPage(

    fluidRow(column(6, selectizeInput("in1", 
            label = NULL, 
            choices = c("alpha", 
               "beta", 
               "gamma"), 
            selected = "beta")), 
      column(6, textOutput('out1'))) 


)) 

Noch mag ich die Auswahl meines selectizeInputwenn jeder Wert aus dem Client-Web-Browser übergeben wird, aktualisieren.

So mache ich das auf der Server-Seite

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

    query_text <- character() 

    observe({ 
    query <- parseQueryString(session$clientData$url_search) 
    if (!is.null(query[['text']])) { 
     query_text <<- query[['text']] 
     updateSelectizeInput('in1', 
          label = NULL, 
          choices = c("alpha","beta", "gamma"), 
          selected = query_text, 
          server = TRUE) 
    } 
    }) 

    output$out1 <- renderText({ 
    input$in1 
    }) 

}) 

Wenn ich meine app starten mit

shinyApp(ui = ui, server = server) 

Ich bekomme keine Fehler, und ich bin in der Lage, die textOutput durch manuell ändern Auswahl ein Wert von selectizeInput. Aber wenn ich versuche, einen Wert mit meinem Browser zu übergeben, damit meine if Zustand Auslösung, bekomme ich diesen Fehler

Warning: Error in $: $ operator is invalid for atomic vectors 
Stack trace (innermost first): 
    56: dropNulls 
    55: updateSelectizeInput 
    54: observerFunc [/Users/francesco/Desktop/Tests/testy/app.R#35] 
    1: runApp 
ERROR: [on_request_read] connection reset by peer 

Antwort

1

Was du hast funktioniert nur mit Ausnahme der Tatsache, dass ... das erste Argument von updateSelectizeInput ist die session Objekt und nicht die Element-ID. Siehe ?updateSelectizeInput. Also, fügen Sie es einfach hinzu:

updateSelectizeInput(session, 'in1', 
          label = NULL, 
          choices = c("alpha","beta", "gamma"), 
          selected = query_text, 
          server = TRUE) 

und es wird funktionieren.

Verwandte Themen