2015-07-13 173 views
1

我试图发送一个JavaScript变量的值从ui.RServer.R只要它被更改。 当用户点击一个链接时,其href值会被警告。直到这里它工作正常。 的链接是形式使用闪亮的观察功能R

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

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

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

回答

3

我真的不完全了解其中的链接是从,以及如何应用程序看起来,因为你没”来了t提供足够的代码(例如:它是什么意思“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) 
    }) 
    } 
)) 
+0

请参阅我加了如何产生的链接变量中的信息。 @daattali – alloyeduniv

+0

仍然不完全清楚。没有实际的'link'变量。你只是在UI中使用标签$ a(...)吗?如果你提供一个我们可以运行的例子,真的会有所帮助 –

+0

其实链接是从网页抓取中产生的。并且,当单击链接时,onclick函数会将href的值发送给clickFunc(link),因此link是clickFunc函数的参数。警报(链接)正在工作意味着链接的价值存在。 – alloyeduniv