3

这个想法

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

问题

既不tipify()也不popify()正确地实现textOutput()为他们的titleorcontent论点。他们需要一个字符串,所以我尝试使用一个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)

是一个类似的问题,但它不能解决此处描述的问题。

4

1 回答 1

3

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

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)

希望能帮助到你。

于 2016-09-09T13:12:48.653 回答