javascript - 将 onRender() 函数中创建的对象保存在 htmlWidgets 中

标签 javascript r shiny plotly htmlwidgets

我正在 Shiny 应用程序中使用 htmlWidgets 包中的 onRender() 函数。我试图保存在给定的 onRender() 函数调用中创建的某些对象,以便可以在给定的 onRender() 函数调用之外使用它们。

下面是我的 MWE。我在 onRender() 函数中创建一个名为 val2 的对象,它只是 slider 输入值乘以 2。我可以保存 val2 对象,以便稍后在 onRender() 函数之外使用它吗? (我意识到在这个过于简化的示例中我不需要使用 onRender() 函数来创建 val2 对象,但我试图保持示例简单)。

感谢您的建议!

library(plotly)
library(htmlwidgets)
library(shiny)

myPlot <- qplot(data=mtcars, mpg, cyl)
gMyPlot <- ggplotly(myPlot)

ui <- shinyUI(fluidPage(
  sliderInput("ci", "Value:", min = 0, max = 1, value=0.95, step=0.01),
  plotlyOutput("myTest")
))

server <- shinyServer(function(input, output) {

  ci <- reactive(input$ci)

  output$myTest <- renderPlotly(gMyPlot %>% onRender("
                  function(el, x, data) {
                  val2 = data * 2
                  console.log(val2)
                  }", data=ci()))})

shinyApp(ui, server)

最佳答案

这就是这样做的。我修改了您的示例以使其更具交互性。然后我使用 javascript 将“val2”值存储两次,一次存储在 h3 标记中(我首先开始工作),然后作为响应式(Reactive) input 列表的元素(当然这更有用) )。请注意,这似乎不是很有效,因为值在服务器和客户端之间来回传输。

这是代码:

library(plotly)
library(htmlwidgets)
library(shiny)

ui <- shinyUI(fluidPage(
  tags$h3('',class ='val2'),
  sliderInput("ci", "Value:", min = 0, max = 34, value=34, step=1),
  plotlyOutput("myPlot"),
  textOutput("outval2")
))

server <- shinyServer(function(input, output) {

  ci <- reactive(input$ci)

  output$myPlot <- renderPlotly({
            mdf <- mtcars %>% filter(mpg<ci())
            myPlot <- qplot(data=mdf, mpg, cyl)
            ggplotly(myPlot) %>% onRender("function(el, x, data) {
                                            val2 = data * 2
                                            console.log(val2)
                                            $('h3.val2').text('val2:'+val2);
                                            Shiny.onInputChange('val2', val2);
                                            }", data=ci())
            })
  output$outval2 <- renderPrint({sprintf("The calculated value is:%d",input$val2)})
  }
)
shinyApp(ui, server)

这是工作应用程序的屏幕截图:

enter image description here

值得一读的相关帖子是:Sending Shiny data from client to server

关于javascript - 将 onRender() 函数中创建的对象保存在 htmlWidgets 中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43019197/

相关文章:

r - 如何在 R Shiny 中单独更改 renderTable 中列的位数

r - R Shiny应用程序中的执行延迟

css - R Shiny : color fileInput button and progress bar

javascript - crm 动态 365 中的 moveNext

javascript - jasmine.matchersUtil.equals 与 ===

javascript - 如何获取我滚动到的 div 的 ID?

html - R Shiny - 垂直对齐标签并以水平形式输入

javascript - 在我的机器上托管 Node 应用程序

r - 如何根据 R 语言的测试创建 bool 列?

linux - 如何使用 R 将 Raspberry Pi 中存储的文件直接读取到 Window