2016-03-03 56 views
1

我目前正在开发一个闪亮的小工具,并遇到了由renderUI()生成的Bootstrap弹出不会触发的小问题。任何人都可以阐明为什么这可能是?R: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() 

回答

3

我认为这正在发生的事情,因为从renderUIpopoverjs后创建的绑定,所以它不会初始化。

继从this post答案,你可以这样做:

popoverInit <- function() { 
    tags$head(
    tags$script(
     "$(document).ready(function(){ 
     $('body').popover({ 
      selector: '[data-toggle=\"popover\"]', 
      trigger: 'hover'   
     });});" 
    ) 
) 
} 
相关问题