如何使用闪亮的javascript函数?

时间:2019-01-04 12:51:25

标签: javascript r shiny

我想使用闪亮的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不是函数

2 个答案:

答案 0 :(得分:6)

它不适用于$( 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函数将告诉浏览器仅在页面,即文档一次运行内部代码。准备好执行JavaScript代码的对象模型(DOM),请注意,如果过早激活该代码(即在加载图像之前),我们还无法为其附加事件处理程序。在将事件处理程序附加到图像之前,请确保该图像存在。   ```

答案 1 :(得分:0)

我只想指出,shosaco在答案中调用的函数与原始帖子有所不同,从其无法正常工作的原因尚不清楚。

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

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