2016-05-02 27 views
2

我想设计一个应用程序,它可以选择性地从客户端Web浏览器获取输入。所以,如果我的网址是www.something.com?text=myValue我知道我可以存储myValue闪亮,是否有可能更新基于客户端Web浏览器输入的输入选择?

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

这个简单的应用程序从一个selectizeInput取值,并使得它在textOutput

ui <- shinyUI(fluidPage(

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


)) 

不过我想更新的选择我如果任何值从客户端web浏览器传递selectizeInput

所以我这样做是在服务器端

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 
    }) 

}) 

如果我启动我的

shinyApp(ui = ui, server = server) 

应用程序,我没有得到任何错误,我能够修改textOutput通过手动选择来自selectizeInput的值。但是,当我试图通过一个数值与我的浏览器,因此引发我if条件,我得到这个错误

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 

回答

1

什么你也只是工程除了事实,即...的updateSelectizeInput的第一个参数是session对象,而不是元素ID。请参阅?updateSelectizeInput。所以,只需添加它:

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

它会工作。