R:Popovers不会触发闪亮的反应性UI

时间:2016-03-03 11:30:24

标签: javascript r twitter-bootstrap shiny

我目前正在开发一个闪亮的小工具,并遇到了由renderUI()生成的Bootstrap popovers不会触发的小问题。任何人都可以阐明为什么会这样吗?

我对js不是很熟悉,所以我可以找到这个问题的明显答案。

以下示例再现了该问题。简而言之:创建一个可以呈现侧边栏和图表的小工具;侧栏内有两个应该触发弹出框的链接标记,第一个是在UI对象中生成的,第二个是由uiOutput()renderUI()的组合生成的。至少对我来说,反应性弹出不会触发。

MWE:

library(shiny)
library(miniUI)

# Functions for popovers --------------------------------------------------

popoverInit <- function() {
  tags$head(
    tags$script(
      "$(document).ready(function(){$('[data-toggle=\"popover\"]').popover();});"
    )
  )
}
popover <- function(content, pos, ...) {
  tagList(
    singleton(popoverInit()),
    tags$a(href = "#pop", `data-toggle` = "popover", `data-placement` = paste("auto", pos),
           `data-original-title` = "", title = "", `data-trigger` = "hover",
           `data-html` = "true", `data-content` = content, ...)
  )
}

# Gadget function ---------------------------------------------------------

reactive_popovers <- function(data, xvar, yvar) {

  ui <- miniPage(
    gadgetTitleBar("Reactive popovers"),
    fillRow(  # Sidebar and plot.
      flex = c(1, 10),
      tagList(
        tags$hr(),

        ## This popover works fine:
        popover("No problems", pos = "right", "Working popover"),

        tags$hr(),

        ## This one doesn't.
        uiOutput("reactive_popover")
      ),

      ## A pointless plot.
      miniContentPanel(
        plotOutput("plot", height = "100%")
      )
    )
  )

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

    ## Render popover.
    output$reactive_popover <- renderUI({
      popover("Popover content", "right", "Dead popover")
    })

    ## Render plot.
    output$plot <- renderPlot({
      plot(mpg ~ hp, data = mtcars)
    })
  }

  runGadget(ui, server, viewer = browserViewer())
}

reactive_popovers()

1 个答案:

答案 0 :(得分:4)

我认为这种情况正在发生,因为来自popover的{​​{1}}是在renderUI绑定之后创建的,所以它不会被初始化。

根据this post的回答,你可以这样做:

js
相关问题