2016-09-20 62 views
1

我的目标是获得一个radioButton()输入HTML的标签复位功能。radioButton()与HTML和shinyjs :: reset()的选择

我从以下内容开始,因为radioButtons()不允许HTML用于标签。

library(shiny) 
library(shinyjs) 

ui <- shinyUI(bootstrapPage(

    useShinyjs(), 
    tags$div(id = "form", 
    tags$div(HTML(' 
       <div id="rating" class="form-group shiny-input-radiogroup shiny-input-container"> 
       <label class="control-label" for="rating">Your Rating:</label> 
       <div class="shiny-options-group"> 
       <div class="radio"> 
       <label> 
       <input type="radio" name="one" value="1"/> 
       <span><i class="fa fa-star" aria-hidden="true"></i></span> 
       </label> 
       </div> 
       <div class="radio"> 
       <label> 
       <input type="radio" name="two" value="2"/> 
       <span><i class="fa fa-star" aria-hidden="true"></i><i class="fa fa-star" aria-hidden="true"></i></span> 
       </label> 
       </div> 
       </div> 
       </div>'))), 

    actionButton("feedback_btn", "send feedback", icon = icon("send", lib = "font-awesome")), 
    htmlOutput("Ratingout") 
)) 

    server <- shinyServer(function(input, output, session) { 
    output$Ratingout <- renderText({ 
     paste("The Rating was ", input$rating) 
    }) 

    observeEvent(input$feedback_btn, { 
     reset("rating") 

    }) 
    }) 

    shinyApp(ui, server) 

,但我遇到了两个问题:

  • 我无法访问input$Ratingout值和
  • 看来,我没有以正确的方式使用shinyjs::reset();因为我想以某种方式重置按钮,按下按钮后有没有选择。

回答

2

您需要输入bind才能在服务器端使用它。

在我的脑海里很容易地覆盖有光泽radioButtons

但帮助,您可以看到:

如果需要代表“无选择”状态,有可能 默认单选按钮没有选择使用 selected = character(0)。不过,这不建议使用,因为一旦用户做出选择,用户无法返回到该状态。 相反,请考虑让您的第一个选项为c(“无 选中”=“”)。

所以尤为明显使用0作为默认值(resetcharacter(0)工作)

library(shiny) 
library(shinyjs) 

edit_button=function(rb){ 

    for(i in 1:length(rb$children[[2]]$children[[1]])){ 
    value=as.numeric(rb$children[[2]]$children[[1]][[i]]$children[[1]]$children[[1]]$attribs$value) 
    if(!is.na(value)&value>0){ 
    rb$children[[2]]$children[[1]][[i]]$children[[1]]$children[[2]]$children[[1]]=HTML(paste(rep('<i class="fa fa-star" aria-hidden="true"></i>',value),sep = "",collapse = "")) 
    } 
    } 
    rb 

} 




ui <- shinyUI(bootstrapPage(
    edit_button(radioButtons("rate_","Rate",choices = list("None selected"=0,'one'=1,"two"=2))), 
    useShinyjs(), 
    actionButton("feedback_btn", "send feedback", icon = icon("send", lib = "font-awesome")), 
    htmlOutput("Ratingout") 
      )) 

server <- shinyServer(function(input, output, session) { 
    output$Ratingout <- renderText({ 
    paste("The Rating was ", input$rate_) 
    }) 

    observeEvent(input$feedback_btn, { 
    reset("rate_") 
    }) 
}) 

shinyApp(ui, server) 
+0

OK - 这对我来说已经可用!在我的用例中,(甚至)更好的解决方案是初始和重置状态(不推荐)的版本,没有按钮被突出显示。但是我的知识分子接近零... – sammerk