R Shiny: Получить цвет фона строки DT поверх цвета фона столбца - PullRequest
0 голосов
/ 26 октября 2018

Я использую DT::renderDT в блестящем приложении и форматирую цвет фона для определенных столбцов и строк. Мне нужно, чтобы цвет фона строки был поверх цвета фона столбца. Я попытался изменить порядок formatStyle, но это не сработало. Вот небольшой пример -

library(shiny)
library(DT)

shinyApp(
  ui = fluidPage(
    DTOutput("table")
  ),
  server = function(input, output, session) {    
    output$table <- renderDT({
      head(iris) %>%
        datatable() %>%
        formatStyle(c(2,4), backgroundColor = "#fcf4d9") %>%
        formatStyle(1, target = 'row', 
          backgroundColor = styleEqual(c(4.7, 5), c("#fc8a8a", "#fc8a8a"))
          # comment above row and ucomment below row for row color using styleInterval()
          # backgroundColor = styleInterval(c(0, 5, 9), c('blue', 'green', 'red', 'orange'))

        )
    })
  }
)

Результат (неверный) с styleEqual() -

Example with styleEqual

Результат (неверный) с StyleInterval() -

Example with styleInterval

Цвет строки должен быть сверху желтого (цвет столбца).

Ищет обобщенное решение, которое будет работать для нескольких строк и с styleEqual() или styleInterval(). Любая помощь приветствуется. Спасибо!

1 Ответ

0 голосов
/ 08 июня 2019

Вот решение:

rowCallback <- c(
  "function(row, data, displayNum, displayIndex, dataIndex){",
  "  if(data[1] === 4.7){",
  "    $(row).find('td').addClass('red');",
  "  }",
  "}"
)

shinyApp(
  ui = fluidPage(
    tags$head(
      tags$style(
        HTML(
          "table.dataTable tbody tr td.red {background-color: #fc8a8a !important}"
        )
      )
    ),
    DTOutput("table")
  ),
  server = function(input, output, session) {    
    output$table <- renderDT({
      head(iris) %>%
        datatable(options = list(rowCallback = JS(rowCallback))) %>%
        formatStyle(c(2,4), backgroundColor = "#fcf4d9")
    })
  }
)
...