【问题标题】:Using observe function in shiny R在闪亮的 R 中使用观察功能
【发布时间】:2015-10-01 06:02:36
【问题描述】:

我正在尝试将 JavaScript 变量的值从 ui.R 发送到 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)
  })
})

【问题讨论】:

    标签: javascript r variables shiny observers


    【解决方案1】:

    由于您没有提供足够的代码(例如:“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)
        })
      }
    ))
    

    【讨论】:

    • 请参阅我添加了有关如何生成链接变量的信息。 @daattali
    • 仍然不完全清楚。没有实际的 link 变量。你只是在 ui 中使用 tags$a(...) 吗?如果您提供一个我们可以运行的示例,真的会有所帮助
    • 实际上链接是从网页抓取中生成的。并且,当单击链接时,onclick 函数将 href 的值发送给 clickFunc(link),因此 link 是 clickFunc 函数的参数。 alert(link) is working 表示链接的值存在。
    • 在服务器中,什么是 input$btn ?还有,什么是 js$clickfunc ?它们是封装功能吗?如果是,他们会跟踪点击事件吗?请详细说明代码。 :)
    • 差不多。这又回到了我不知道您的实际原始代码是什么样子的问题(您是否像我一样使用 tags$a ?)。我假设我们的代码非常相似,但您没有“return false”,这会导致应用程序转到不同的 url,并在单击按钮后出现很大的“NOT FOUND”
    猜你喜欢
    • 2022-01-17
    • 2021-05-17
    • 2016-07-25
    • 2019-03-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多