2015-11-18 39 views
0

我知道类似的question已经得到解答,但该解决方案在字符串输入时创建了具有不同标签的新动作按钮。我需要的是保持按钮(按钮的计数器),因为当我更改标签并创建一个新按钮时,它的计数器为0(未点击)。动态按钮的更新标签有光泽

所以基本上我需要一个更新函数来改变actionButton的标签,当它被按下时。您按一次,标签更改。

input$Button <- renderUI({ 
    if(input$Button >= 1) label <- "new label" 
    else label <- "old label" 
    actionButton("Button", label = label) 
}) 

这样的事情,但没有正在重置按钮的值(通过创建一个全新的一个)。

谢谢!

回答

2
  1. reactiveValues()可以提供帮助。详情请查询http://shiny.rstudio.com/articles/reactivity-overview.html。 在下面的示例中,我将您的input$Button更名为input$click,以避免双击“Button”名称。 由于我们在renderUI()包装标签,input$click最初触发它一旦建立,这就是为什么我把标签 条件为:?!?if(vars$counter >= 2)

  2. 另一种解决方案是删除只读属性(这里找到:https://github.com/rstudio/shiny/issues/167

    attr(input, "readonly") <- FALSE 
    input$click <- 1 
    
  3. 举一个例子 粘贴到你的[R控制台以下:

    ui <- bootstrapPage(
        uiOutput('Button') 
    ) 
    
    server <- function(input, output) { 
    
        # store the counter outside your input/button 
        vars = reactiveValues(counter = 0) 
    
        output$Button <- renderUI({ 
         actionButton("click", label = label()) 
        }) 
    
        # increase the counter 
        observe({ 
         if(!is.null(input$click)){ 
          input$click 
          isolate({ 
           vars$counter <- vars$counter + 1 
          }) 
         } 
        }) 
    
        label <- reactive({ 
         if(!is.null(input$click)){ 
          if(vars$counter >= 2) label <- "new label" 
          else label <- "old label" 
         } 
        }) 
    } 
    
    # run the app 
    shinyApp(ui = ui, server = server) 
    
+0

我的问题是,我是使用输入$单击(模板)来激活其他功能,而当新的按钮生成它会自动取消点击,所以我的功能消失。有了这个解决方案,问题仍然存在,但由于您的解决方案非常优雅,并使我能够在控制流程中实现我的错误并修复它,所以谢谢。我希望别人也能找到这个有用的东西。 – user4065758

+0

我认为使用'session $ sendCustomMessage'来更新按钮将是一个更好的方法,因为它将消除重新创建按钮的需要 –

+0

我似乎无法找到有关此功能的任何文档。你能简单地解释一下你如何想象sendCustomMessage在所需行为中的用法? – user4065758

1

您可以使用updateActionButton从本地闪亮的包:

​​

enter image description here