Блестящий поповер из блестящей BBS отображается только каждый второй раз

Динамическое всплывающее окно с глянцевым BBS появляется только при каждом втором выборе.

library(shiny)
library(shinyBS)

ui <- fluidPage(
   sidebarLayout(
      sidebarPanel(
        selectInput("poppy", "Think!", c("A", "B", "C", "D")),
        bsButton("dummy", "dummy")), ## required, dummy
      mainPanel(
        helpText("Note that when you select from the box, popover turns up every second time only!")
)))

server <- function(input, output, session) {
   observe({
     poppy = paste("You selected ", input$poppy)
     addPopover(session, "poppy", "Every second time", poppy)
})}

shinyApp(ui = ui, server = server)

2 ответа

Решение

Это известная ошибка в Bootstrap:

Bootstrap popover уничтожает и воссоздает работы только каждый второй раз

Если вы не хотите изменять код ShinyBS, добавьте файл js со следующим в вашей подпапке www:

shinyBS.addTooltip = function(id, type, opts) {
  var $id = shinyBS.getTooltipTarget(id);
  var dopts = {html: true};
  opts = $.extend(opts, dopts);

  if(type == "tooltip") {
    $id.tooltip("destroy");
    setTimeout(function() {$id.tooltip(opts);},200);
  } else if(type == "popover") {
    $id.popover("destroy");
    setTimeout(function() {$id.popover(opts);},200);
  }
}

и добавьте к своему интерфейсу следующее: (при условии, что файл называется pop_patch.js)

singleton(tags$head(tags$script(src = "pop_patch.js"))),

Я мог бы найти более простое решение, используя removePopover () и Sys.sleep (0.2) перед вызовом addPopover().

      observeEvent(input$poppy, {
     removePopover(session, "poppy")
     Sys.sleep(0.2)
     poppy = paste("You selected ", input$poppy)
     addPopover(session, "poppy", "Every second time", poppy)
})

Это работает для меня без необходимости в файле pop_patch.js

Другие вопросы по тегам