R 获取闪亮事件的值

R 获取闪亮事件的值,r,shiny,R,Shiny,我想在javascript中访问shinny.setInputValue()的值。在chrome控制台中,我尝试了$('too').length和document.querySelector('too').innerHTML,但它没有捕获闪亮的事件 注意:我不想要闪亮输出的值。我知道document.querySelector('#table')。innerHTML也返回 library(shiny) ui <- fluidPage( HTML('<script&

我想在javascript中访问
shinny.setInputValue()
的值。在chrome控制台中,我尝试了
$('too').length
document.querySelector('too').innerHTML
,但它没有捕获闪亮的事件

注意:我不想要闪亮输出的值。我知道
document.querySelector('#table')。innerHTML
也返回

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

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

shinyApp(ui,server)
库(闪亮)

ui我不确定我是否正确理解了这个问题,但无论如何

您已经在javascript中提供了
shinny.setInputValue()
的值。那么,为什么不声明这样一个变量:

library(shiny)  
ui <- fluidPage(      
  HTML('<script>
       $(document).on("shiny:sessioninitialized", function(event) {
       var inputValue = "noone"
       console.log(inputValue)
       Shiny.setInputValue("too", inputValue);
       });</script>'),         
  textOutput("table")      
)

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

shinyApp(ui, server)
库(闪亮)

ui我认为您可以将其保存到全局变量中:

library(shiny) 

js_set <- "$(document).on('shiny:sessioninitialized', function(event) {
        too = Math.random();
        Shiny.setInputValue('too', too);
})"


js_get <- "$(document).on('shiny:value', function(event) {
        console.log(too);
})"


ui <- fluidPage( 
    tags$script("var too = 0;"),
    tags$script(js_set),
    tags$script(js_get),
    textOutput("table")      
)

server <- function(input, output) {

    output$table <- renderPrint({
        req(input$too)
        input$too
    })
    
}

shinyApp(ui,server)
库(闪亮)

js_set无论何时设置输入值,都可以使用此函数触发事件:

function setInputValue(name, value) {
  Shiny.setInputValue(name, value);
  $('body').trigger('myevent', [name, value]);
}
然后您可以收听此事件:

$('body').on('myevent', function(event, name, value) {
  // do something with name and value
});
例如:

js <- "
function setInputValue(name, value) {
  Shiny.setInputValue(name, value);
  $('body').trigger('myevent', [name, value]);
}
$('body').on('myevent', function(event, name, value) {
  console.log('name:', name);
  console.log('value:', value);
});
$(document).on('shiny:sessioninitialized', function() {
  setInputValue('too', 'hello');
});"


ui <- fluidPage( 
  tags$script(HTML(js)),
  verbatimTextOutput("table")      
)

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

shinyApp(ui,server)

js很抱歉没有说清楚。这更多是为了学习。我有一个来自R的大JS包,它通过shinny.setInputValue()触发事件。我不想定制那个软件包。相反,我希望JS在触发shinny.setInputValue时监听。我也可以通过input$在R中完成,但我想在JS中完成。