【问题标题】:DT callback/conditional styling doesn't work after editing in an R Shiny context在 R Shiny 上下文中编辑后,DT 回调/条件样式不起作用
【发布时间】:2021-07-27 23:33:11
【问题描述】:

我遇到以下问题。我想有条件地格式化我的列,以便第 2 列中非正数的值显示为红色。我还希望在编辑单元格后保持此条件。例如:

library(DT)
df <- data.frame(
     col1 = 1:5,
     col2 = c(-1,-1,0,1,1)
   )
datatable(df,editable = T)%>%
formatStyle(
2,
color = styleInterval(cuts = 0,values = c("red","black"))
)

当它显示在 RStudio IDE 的查看器部分时,它可以工作。当我编辑单元格值时,颜色也会更新以反映新值。

但是,当我在 R Shiny 中运行它时:

ui <- fluidPage(
  dataTableOutput("test")
)
server <- function(input,output,sesion){
  output$test <- DT::renderDataTable({
    df <- data.frame(
      col1 = 1:5,
      col2 = c(-1,-1,0,1,1)
    )
    datatable(df,editable = T)%>%
      formatStyle(
        2,
        color = styleInterval(cuts = 0,values = c("red","black"))
      )
  })
}
shinyApp(ui,server)

回调变得完全没有响应。无论我如何尝试编辑单元格值,初始化时颜色为红色的单元格都将保持红色。有人可以解释一下这种现象是如何发生的以及我该如何解决这个问题吗?

【问题讨论】:

    标签: r shiny dt


    【解决方案1】:

    这适用于选项server = FALSE

    library(shiny)
    library(DT)
    
    ui <- fluidPage(
      DTOutput("test")
    )
    server <- function(input,output,sesion){
      output$test <- renderDT({
        df <- data.frame(
          col1 = 1:5,
          col2 = c(-1,-1,0,1,1)
        )
        datatable(df,editable = T)%>%
          formatStyle(
            2,
            color = styleInterval(cuts = 0,values = c("red","black"))
          )
      }, server = FALSE)
    }
    shinyApp(ui,server)
    

    【讨论】:

    • 像魅力一样工作,谢谢!如果问题不是太长,您能否解释一下是什么导致了这种行为,如果我们想保留server = TRUE,是否还有其他解决方案(即使涉及 javascript 代码)?
    猜你喜欢
    • 2018-08-09
    • 1970-01-01
    • 2021-12-13
    • 2018-11-01
    • 2019-09-05
    • 2018-02-06
    • 2023-03-26
    • 1970-01-01
    • 2016-05-22
    相关资源
    最近更新 更多