使用Javascript在Shiny中配置googleis事件监听器

r - Using Javascript to configure a googleVis event listener in Shiny

本文关键字:googleis 事件 监听器 配置 Javascript Shiny 使用      更新时间:2023-09-26

基本上,我有一个gvisCalendar图表从googleis包在一个闪亮的应用程序,我想显示一个dataTable下面的图表,对应于一个选定的框。

我可以通过设置gvis.listener来添加事件侦听器。jscode参数为一个变量,该变量保存javascript代码字符串。例如,使用以下代码,我可以调出所选日历日期的wikipedia页面:
output$dates_plot <- renderGvis({
      gvisCalendar(calendar.ddply,
                   options = list(
                                  colorAxis = "{
                                      minValue: 0,  
                                      colors: ['E9967A', 'A52A2A']
                                   }",
                  gvis.listener.jscode = jscode2 )
          )
    })
    jscode2<- "window.open('http://en.wikipedia.org/wiki/'
              + data.getValue(chart.getSelection()[0].row,0)); "

使用这段代码,我运行我的程序,选择"June 16, 2015"框,在我的浏览器上出现了这个网站的新选项卡:https://en.wikipedia.org/wiki/Tue_Jun_16_2015_00:00:00_GMT-0400_(EDT)

我并不想对维基百科做什么,我只是举个例子。

我所要做的就是将所选日历框的日期保存为R对象,这样我就可以显示与该日期对应的数据表。

我几乎没有javascript的经验。谢谢你!

可以使用Shiny.onInputChange将数据发送回服务器。下面是一个例子:

library(shiny)
library(googleVis)
server <- function(input, output) {
        output$dates_plot <- renderGvis({
                gvisCalendar(Cairo,
                             options = list(
                                     colorAxis = "{
                                      minValue: 0,  
                                      colors: ['E9967A', 'A52A2A']
                                   }",
                                     gvis.listener.jscode = "
                                     var selected_date = data.getValue(chart.getSelection()[0].row,0);
                                     var parsed_date = selected_date.getFullYear()+'-'+(selected_date.getMonth()+1)+'-'+selected_date.getDate();
                                     Shiny.onInputChange('selected_date',parsed_date)")
                )
        })
        output$date <- renderText({
               input$selected_date
        })
}
ui <- shinyUI(fluidPage( 
        htmlOutput("dates_plot"),
        textOutput("date")
))
shinyApp(ui = ui, server = server)

在这个例子中,我将日期解析为YYYY/M/D,如果你想保持javascript的长日期格式,你也可以返回selected_date.toString()而不是parsed_date