我同时使用required: true
和formattable
来创建自定义表格,同时仍然能够编辑单元格值(使用DT
中的editable=T
)。
问题在于,如果我使用DT
制作自定义表格,每当我双击一个单元格来编辑其内容时,它将显示HTML代码而不是简单的值。
这里有个例子:
formattable()
在这里您可以看到问题:
有一种简单的方法可以解决此问题吗?
答案 0 :(得分:1)
您可以将formattable
与DT
选项结合使用,而不是使用render
来设置CSS。
library(DT)
products <- data.frame(id = 1:5,
price = c(10, 15, 12, 8, 9),
rating = c(5, 4, 4, 3, 4))
render <- c(
"function(data, type, row){",
" if(type === 'display'){",
" var s = '<span style=\"padding: 0 4px; border-radius: 4px; background-color: pink;\">' + data + '</span>';",
" return s;",
" } else {",
" return data;",
" }",
"}"
)
datatable(products, editable = "cell",
options = list(
columnDefs = list(
list(targets = 2, render = JS(render))
)
)
)
有些奇怪的事情发生了:如果您在单元格内容上精确地双击 (该值,例如10),则该编辑将不起作用。您必须双击该单元格,但不必双击该值。
这是另一种解决方案,取自this question。
library(DT)
products <- data.frame(id = 1:5,
price = c(10, 15, 12, 8, 9),
rating = c(5, 4, 4, 3, 4))
break_points <-
function(x) stats::quantile(x, probs = seq(.05, .95, .05), na.rm = TRUE)
red_shade <-
function(x) round(seq(255, 40, length.out = length(x) + 1), 0) %>%
{paste0("rgb(255,", ., ",", ., ")")}
brks <- apply(products, 2, break_points)
clrs <- apply(brks, 2, red_shade)
column <- "price"
datatable(products, editable = "cell") %>%
formatStyle(column, backgroundColor = styleInterval(brks[,column], clrs[,column]))