首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ShinyBS bsPopover和updateSelectInput

ShinyBS bsPopover和updateSelectInput
EN

Stack Overflow用户
提问于 2016-05-01 11:08:03
回答 1查看 804关注 0票数 1

我想向动态用户界面添加工具提示。当我初始化UI时,工具提示工作得很好

代码语言:javascript
复制
selectInput(ns("Main2_1"),"Label","abc",  selectize = TRUE, multiple = TRUE),
bsPopover(ns("Main2_1"), "Label", "content", placement = "left", trigger = "focus"),

但是,一旦我用以下方式更新服务器脚本中的Main2_1选项

代码语言:javascript
复制
updateSelectInput(session, "Main2_1", choices=foo)

它也会删除工具提示。在服务器端添加一个带有addPopover的新工具提示并不能消除这个问题。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-05-11 16:31:59

我同意,这是个糟糕的设计。我甚至不知道,为什么addPopover不能工作。也许是因为观察者没有一个一个地执行命令..。

然而,有一种方法可以达到你的目的。通过重写bsPopover,我们可以考虑到相应元素的更改。

我创建了一个updateResistantPopover函数,它向元素添加了一个附加的eventListener (mutationListener),给出了id,每当元素的某些子元素发生更改时,该函数就会重新安装弹出函数。

下面是示例代码:

代码语言:javascript
复制
library(shiny)
library(shinyBS)

updateResistantPopover <- function(id, title, content, placement = "bottom", trigger = "hover", options = NULL){
  options = shinyBS:::buildTooltipOrPopoverOptionsList(title, placement, trigger, options, content)
  options = paste0("{'", paste(names(options), options, sep = "': '", collapse = "', '"), "'}") 
  bsTag <- shiny::tags$script(shiny::HTML(paste0("
    $(document).ready(function() {
      var target = document.querySelector('#", id, "');
      var observer = new MutationObserver(function(mutations) {
        setTimeout(function() {
          shinyBS.addTooltip('", id, "', 'popover', ", options, ");
        }, 200);
      });
      observer.observe(target, { childList: true });
    });
  ")))
  htmltools::attachDependencies(bsTag, shinyBS:::shinyBSDep)
}

ui <- shinyUI(fluidPage(
  selectInput("Main2_1","Label","abc",  selectize = TRUE, multiple = TRUE),
  updateResistantPopover("Main2_1", "Label", "content", placement = "right", trigger = "focus"),
  actionButton("destroy", "destroy!")    
))

server <- function(input, output, session){     
  observeEvent(input$destroy, {
    updateSelectInput(session, "Main2_1", choices="foo")
  })
}

shinyApp(ui, server)
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36965954

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档