我尝试使用fnRowCallback参数为我的数据表中的整行着色,效果有效但其他DT函数不再有效。这是一个简单的例子:
names <- c("a","b","c","d")
days <- c(10,5,2,1)
dat <- data.frame(name=rep(names,days),date=as.Date((Sys.Date()-sum(days)+1):Sys.Date(),origin="1970-01-01"),value=rep(days,days),value2=(rep(days*2,days)))
datatable(dat,options=list(
fnRowCallback = JS('function(row,data, iDisplayIndex, iDisplayIndexFull){
var d = data[2];
d = new Date(d);
c = new Date(+new Date - 12096e5);
if (d > c)
$(row).css("background-color", "blue");
}'),
rowCallback = JS(
'function(row, data) {
if (parseFloat(data[4]) > parseFloat(data[3]))
$("td:eq(4)", row).css("background-color", "green");
}')
)) %>% formatCurrency(c("value","value2"))
fnRowCallback和rowCallback都只会导致fnRowCallback的影响,同时也会忽略formatCurrency。如果你注释掉fnRowCallback,formatCurrency将与rowCallback参数一起正常工作。
这可能是DT软件包的一个问题,但由于我不熟悉javascript数据表库,我的代码中可能存在问题,或者缺少启用..的选项。 / p>
答案 0 :(得分:2)
fnRowCallback
是Datatable v1.10 rowCallback
(info here)的Datatable v1.9版本。您实际上是在代码中设置rowCallback
两次,这可能会导致问题。
尝试将所有代码放入rowCallback
:
datatable(dat,options=list(
fnRowCallback = JS('function(row,data, iDisplayIndex, iDisplayIndexFull){
}'),
rowCallback = JS(
'function(row, data) {
if (parseFloat(data[4]) > parseFloat(data[3]))
$("td:eq(4)", row).css("background-color", "green");
var d = data[2];
d = new Date(d);
c = new Date(+new Date - 12096e5);
if (d > c)
$(row).css("background-color", "blue");
}')
)) %>% formatCurrency(c("value","value2"))
rowCallback
函数在呈现之前应用于每一行(docs here)。