在闪亮的R中使用观察功能

时间:2015-07-13 04:36:22

标签: javascript r variables shiny observers

我正在尝试将 ui.R 的JavaScript变量的值发送到 Server.R 。 当用户点击链接时,会提醒其href值。直到这里它工作正常。 链接的格式为

<a href="something.com" onclick=\"clickFunction(this.href); return false;\" target=\"_blank\">Sample link </a>

现在,href值存储在 ui.R 中的变量link中。 我使用 Shiny.onInputChange 函数将链接值发送到 server.R

server.R 中的观察功能并没有给我任何价值。如果可能的话,请告诉我如何使用观察功能或任何其他方式。

ui.r

library(shiny)
shinyUI(fluidPage(

  tags$script(HTML("
                      function clickFunction(link){
                          alert(link); 
                          Shiny.onInputChange(\"linkClicked\",link);   
                      }
                     "))

//rest of the code which is not related

)

server.R

library(shiny)

shinyServer(function(input, output) {

  observe({
    input$linkClicked
    print(input$linkClicked)
  })
})

1 个答案:

答案 0 :(得分:5)

我并不完全了解链接的来源以及应用程序的外观,因为您没有提供足够的代码(例如:“UI中的变量”是什么意思?)。但是这里有一个小例子,展示了javascript如何成功地向服务器发送信息。我正在使用的是shinyjs包,这是我写的包。

library(shinyjs)
jscode <- "
shinyjs.clickfunc = function(link) {
  alert(link);  
  Shiny.onInputChange('linkClicked', link);
}"

runApp(shinyApp(
  ui = fluidPage(
    useShinyjs(),
    extendShinyjs(text = jscode),
    textInput("link", ""),
    actionButton("btn", "submit")
  ),
  server = function(input, output, session) {
    observeEvent(input$btn, {
      js$clickfunc(input$link)
    })
    observe({
      input$linkClicked
      print(input$linkClicked)
    })
  }
))

修改

如果我正确理解链接是如何生成的,那么

runApp(shinyApp(
  ui = fluidPage(
    tags$script(HTML("
                      function clickFunction(link){
                          alert(link); 
                          Shiny.onInputChange('linkClicked',link);   
                      }
                     ")),
    tags$a(href="www.google.com", onclick="clickFunction('rstudio.org'); return false;", "click me")
  ),
  server = function(input, output, session) {
    observe({
      input$linkClicked
      print(input$linkClicked)
    })
  }
))