繁体   English   中英

如何在Shiny中获得一个按钮来同时调用JavaScript和R代码?

[英]How can I get a button in Shiny to call both JavaScript and R code in parallel?

我在Shiny中有一个HTML按钮,当单击它时,在/www目录中的.js文件中调用JavaScript函数geocodeAddressStreet(...)

tags$body(tags$input(type = "button", 
                     value = "Next", 
                     id = "button1", 
                     onClick = "geocodeAddressStreet(houseNumber,streetName,addressCity,addressState)"))),

但是,当我点击时,我无法弄清楚如何让这个按钮调用第二个文件,让我们说foo.R 这两个过程都是独立运行的,但似乎没有办法在Shiny inputId添加到HTML元素中。 我们目前有两个不同的按钮,其中一个调用R代码,另一个调用JavaScript代码,但这显然是一个不切实际的解决方案。

所以你想要一个按钮,当你点击它时,一个javascript函数和一些R代码被调用? 我能够使用shinyjs包中的onclick函数执行此操作(免责声明:我编写了包)

library(shinyjs)

jsCode <- "
shinyjs.geocodeAddr = function(params) {
  alert('JavaScript called!');
  // geocodeAddressStreet(...)
}
"

runApp(shinyApp(
  ui = fluidPage(
    useShinyjs(),
    extendShinyjs(text = jsCode),
    actionButton("btn", "Click me")
  ),
  server = function(input, output, session) {
    onclick("btn", {
      js$geocodeAddr()
      cat("R called as well")
    })
  }
))

基本上, onclick函数是一个R函数,它将在单击按钮时运行。 在其中你可以很容易地调用R代码,但你也可以使用shinyjs包调用JS代码 - 这就是我调用js$geocodeAddr 看看extendShinyjs函数。 或者,您也可以使用session$sendCustomMessage(...)的常用方法,而不是使用extendShinyjs() session$sendCustomMessage(...)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM