2017-04-26 179 views
2

我试图找出一种方法来获取一个actionButton来更改颜色(也可能是其他样式元素) 目标是非常一般的,我会用它来获得很多按钮响应贯穿我的复杂shinyDashboard应用程序。简单地说:如果点击一个按钮,或者链接到一个按钮的特定元素(即inputslider)发生变化,该按钮应该改变颜色。更改颜色actionButton Shiny R

我通常像这样的代码我的按钮闪亮:

actionButton(inputId= "RunFullModel", label =icon("tree-deciduous", lib = "glyphicon"), 
         style = "color: white; 
         background-color: #35e51d; 
         position: relative; 
         left: 3%; 
         height: 35px; 
         width: 35px; 
         text-align:center; 
         text-indent: -2px; 
         border-radius: 6px; 
         border-width: 2px")), 

我已经浏览我的屁股,但没有运气的东西,工作。 我一直在寻找@Dean Attali的shinyjs来做到这一点,但我只能让它工作来改变打印文本的背景,如下例所示。看起来,使用ToggleClass或AddClass的部分对于actionButton(“x”,“y”)不起作用。 我也尝试从闪亮的包本身使用updateActionButton,但是这似乎不允许将style =“...”包含在该命令中。

library(shiny) 
library(shinyjs) 
library(shinyBs) 
if (interactive()) { 
    shinyApp(
    ui = fluidPage(
     useShinyjs(), 
     inlineCSS(list(.red = "background: red")), 
     inlineCSS(list(.blue = "style = 'background-color: blue'")), 
     actionButton("checkbox", "Make it red"), 
     bsButton("checkbox2", "Make me blue"), 
     p(id = "element", "Watch what happens to me") 
    ), 
    server = function(input, output) { 
     observe({ 
     toggleClass(id = "element", class = "red", 
        condition = input$checkbox) 
     }) 
     observe({ 
     toggleCssClass(id = "checkbox2", class = ".blue", 
        condition = input$checkbox) 
     }) 
    } 
) 
} 

shinyjs的演示模型在这里找到:http://deanattali.com/shinyjs/overview#demo,它看起来好像toggleClass在那里工作与ID按钮“BTN”,但没有代码示例直接被发现,而从间接的例子shinyjs页面的另一部分似乎不起作用。

选项3我尝试让style =“background-color:.... read R变量”部分访问包含颜色名称的R变量,即mycolor < - “red”,但那不也可以工作,而且我对JavaScript的了解太少,无法弄清楚如何完成这项工作。

所以,....如果有人有一个想法如何使用shinyjs进行颜色切换工作,或者使用另一种方法与上面编写的按钮一起使用,我将非常感谢它,并且授予您我永恒的感激之情。 (一直停留在这几个星期,现在这个问题)

马克

附:我也研究过bsButtons,但它们对于我想要的默认类选项来说太有限了。

回答

4

这应该是可行的“纯”闪亮: 使用renderUI()创建按钮并插入条件来检查按钮是否已被点击。

我决定存储反应变量中的信息(按钮是否被点击),如您所写,您计划触发颜色变化“如果点击某个按钮,某个特定元素(如inputslider)会改变链接到一个按钮“。所以你也可以改变global$clicked从其他输入。

library(shiny) 
shinyApp(
    ui = fluidPage(
    uiOutput("button") 
), 
    server = function(input, output) { 
    global <- reactiveValues(clicked = FALSE) 

    observe({ 
     if(length(input$RunFullModel)){ 
     if(input$RunFullModel) global$clicked <- TRUE 
     } 
    }) 

    output$button <- renderUI({ 
     if(!is.null(input$RunFullModel) & global$clicked){ 
     actionButton(inputId= "RunFullModel", label =icon("tree-deciduous", lib = "glyphicon"), 
        style = "color: white; 
        background-color: #35e51d; 
        position: relative; 
        left: 3%; 
        height: 35px; 
        width: 35px; 
        text-align:center; 
        text-indent: -2px; 
        border-radius: 6px; 
        border-width: 2px")   
     }else{ 
     actionButton(inputId= "RunFullModel", label =icon("tree-deciduous", lib = "glyphicon")) 
     } 

    }) 
    } 
) 
+0

上帝就是这样一个简单的解决方案,我应该看到我自己,因为我在我的应用程序中一直使用这种观察方式。有时候,当你对某些事情感到困惑时,你的大脑就会失灵。谢谢! – Mark

+0

没有问题,我们都去过;) – BigDataScientist