我尝试使用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 datatables库的熟悉程度不高,所以我的代码中可能存在问题,或者缺少我想启用的选项。

最佳答案

fnRowCallback是Datatable v1.10 rowCallback的Datatable v1.9版本(信息here)。实际上,您在代码中两次设置了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)。

关于javascript - 使用fnRowCallback自定义DT,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/33776496/

10-09 13:56