【问题标题】:How to use shiny javascript functions?如何使用闪亮的javascript函数?
【发布时间】:2019-01-04 12:51:25
【问题描述】:

我想使用闪亮的 js 函数将数据从 javascript 发送到 R,但无法正常工作。我所做的是一个简单的例子,其中 setinputValue 将“noone”发送到“too”input$too

代码如下:

library(shiny)


ui <- fluidPage(

  HTML("<script>
       $( document ).ready(function() {
       Shiny.setInputValue('too', 'noone');

       });</script>"),


      textOutput("table")


  )


server <- function(input, output) {
 output$table <- renderPrint(input$too)


}

 shinyApp(ui,server)

我得到的js错误是:Shiny.setInputValue is not a function

【问题讨论】:

    标签: javascript r shiny


    【解决方案1】:

    它不适用于$( document ).ready(function(),但适用于$( document ).on("shiny:sessioninitialized", function(event) {

    library(shiny)  
    ui <- fluidPage(      
      HTML('<script>
           $( document ).on("shiny:sessioninitialized", function(event) {
               Shiny.onInputChange("too", "noone");           
           });</script>'),         
      textOutput("table")      
    )
    
    server <- function(input, output) {
      output$table <- renderPrint(input$too) 
    }
    
    shinyApp(ui,server)
    

    原因在tutorial 中给出:你不能太快调用这个函数,你需要一点时间,直到 Shiny 准备好更新输入值:

    在 message.js 中,我们将代码包装在 $(document).ready(function() { ... } 中。这个 jQuery 函数将告诉浏览器只运行里面的代码,一旦页面,即 Document对象模型 (DOM) 已准备好执行 JavaScript 代码。请注意,当我们过早激活此代码时,即在加载图像之前,我们还不能将事件处理程序附加到它。换句话说,我们希望在这里在将事件处理程序附加到图像之前确保图像存在。 ```

    【讨论】:

      【解决方案2】:

      我只是想指出,在 shosaco 的答案中调用的函数与原始帖子不同,从它不起作用的原因来看,这并不清楚。

      Shiny.setInputValue('too', 'noone');
      

      Shiny.onInputChange("too", "noone");           
      

      【讨论】:

      • 正如this tutorial 中指出的那样,它们在v1.1 之后是等价的,是setInputValue() 的较新版本。
      猜你喜欢
      • 1970-01-01
      • 2021-09-28
      • 2017-01-23
      • 1970-01-01
      • 1970-01-01
      • 2020-08-08
      • 2017-07-15
      • 2018-11-23
      • 2020-01-18
      相关资源
      最近更新 更多