【问题标题】:Customizing DT with fnRowCallback使用 fnRowCallback 自定义 DT
【发布时间】:2016-02-19 23:28:57
【问题描述】:

我尝试使用 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 数据表库不太熟悉,因此我的代码中可能存在问题,或者我缺少启用的选项..

【问题讨论】:

  • 您可以尝试将fnRowCallback 代码放入rowCallback 函数中。 fnRowCallback 可能来自以前版本的 DT,可能是错误的,但我认为 rowCallback 替换它,因为我在最近的文档中找不到它。他们仍然保留了一些向后兼容性,所以这可能是导致问题的原因。
  • 那行得通.. 我想我必须让 fnRowCallback 选择所有行,这就是谷歌告诉我的.. 你能否详细说明 fnRowCallback 和普通 rowCallback 之间的区别是什么?无论如何,您可以将此作为我愚蠢问题的有效答案。

标签: javascript jquery r datatables dt


【解决方案1】:

fnRowCallback 是 Datatable v1.9 版本的 Datatable v1.10 rowCallback(信息 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)。

【讨论】:

    猜你喜欢
    • 2020-02-06
    • 1970-01-01
    • 2021-03-04
    • 1970-01-01
    • 2019-02-08
    • 2016-01-15
    • 2019-04-20
    • 2021-06-10
    • 1970-01-01
    相关资源
    最近更新 更多