shinyBS 中的动态弹出窗口或工具提示

Dynamic popover or tooltip in shinyBS

想法

我在闪亮的应用程序中有一个 box()box() 包含一个 title 参数(它又包含一个 icon)和一个 selectInput() 元素。在 icon 上悬停时,我想要一个工具提示(使用 tipify())或一个弹出窗口(使用 popify()),其中 titlecontent 参数(或两者都有) 将根据 selectInput() 输入生成。

问题

tipify()popify() 都没有正确地实现 textOutput() 作为他们的 titlecontent 参数。他们需要一个字符串,所以我尝试使用 reactiveValues() 元素作为函数参数,但它也失败了。

问题

是否可以仅使用 r 使工具提示或弹出框内容动态化?这怎么可能?

我怀疑它可以用 JavaScript 来完成,但我对此知之甚少。

代码

尝试 1 - 失败 - 显示代码而非实际文本

library("shiny")
library("shinydashboard")
library("shinyBS")

ui <- fluidPage(
 box(
   title = span("My box",
                tipify(el = icon(name = "info-circle", lib = "font-awesome"), title = textOutput("TIP"))),
   selectInput(
     inputId = "SELECT",
     label = NULL,
     choices = c("Option1" = "Option1",
                 "Option2" = "Option2"
     ),
     multiple = FALSE
   )
 )
)
server <- function(input, output, session){
  output$TIP <- renderText({"Helo world!"})
}
shinyApp(ui, server)

尝试 2 - 失败 - 无法创建 UI,因为 TIP (reactiveValues()) 尚未定义

library("shiny")
library("shinydashboard")
library("shinyBS")

ui <- fluidPage(
 box(
   title = span("My box",
                tipify(el = icon(name = "info-circle", lib = "font-awesome"), title = TIP$a)),
   selectInput(
     inputId = "SELECT",
     label = NULL,
     choices = c("Option1" = "Option1",
                 "Option2" = "Option2"
     ),
     multiple = FALSE
   )
 )
)
server <- function(input, output, session){
  TIP <- reactiveValues(a = "Hello world!")
}
shinyApp(ui, server)

Here 是一个类似的问题,但它没有解决这里描述的问题。

可以做的是完全在服务器端创建标题。这样你就可以毫无问题地使其动态化。这可以为您提供此类应用程序:

library("shiny")
library("shinydashboard")
library("shinyBS")

ui <- fluidPage(
  box(
    title = uiOutput("title"),
    selectInput(
      inputId = "SELECT",
      label = NULL,
      choices = c("Option1" = "Option1",
                  "Option2" = "Option2"
      ),
      multiple = FALSE
    )
  )
)
server <- function(input, output, session){
  TIP <- reactiveValues()
  observe({
    TIP$a <- ifelse(input$SELECT =="Option1","Hello World","Hello Mars")
  })


  output$title <- renderUI({span("My box",
                   tipify(el = icon(name = "info-circle", lib = "font-awesome"), title = TIP$a))})


}
shinyApp(ui, server)

希望对您有所帮助。