2017-04-26 177 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