来自 shinyBS 的 Shiny popover 仅每隔一秒显示一次
Shiny popover from shinyBS displays every second time only
shinyBS 的动态弹出窗口仅在每隔一秒选择时出现。
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)
这是 Bootstrap 中的一个已知错误:
Bootstrap popover destroy & recreate works only every second time
如果您不想更改 ShinyBS 的代码,请在您的 www 子文件夹中添加一个包含以下内容的 js 文件:
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);
}
}
并将以下内容添加到您的 ui:(假设文件名为 pop_patch.js)
singleton(tags$head(tags$script(src = "pop_patch.js"))),
我可能找到了一个更简单的解决方案,在调用 addPopover() 之前使用 removePopover() 和 Sys.sleep(0.2)。
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 文件
shinyBS 的动态弹出窗口仅在每隔一秒选择时出现。
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)
这是 Bootstrap 中的一个已知错误:
Bootstrap popover destroy & recreate works only every second time
如果您不想更改 ShinyBS 的代码,请在您的 www 子文件夹中添加一个包含以下内容的 js 文件:
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);
}
}
并将以下内容添加到您的 ui:(假设文件名为 pop_patch.js)
singleton(tags$head(tags$script(src = "pop_patch.js"))),
我可能找到了一个更简单的解决方案,在调用 addPopover() 之前使用 removePopover() 和 Sys.sleep(0.2)。
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 文件