javascript - 如何在 Shiny R 应用程序中设置 DataTables 行回调?

标签 javascript r datatables shiny

在 rCharts 中,可以使用特殊的字符串符号设置 DataTables 的 JS 回调:#!函数(par){...}!#。例如,让我们看一下以下 R 代码:

  #JS callback to truncate long strings in table cells and add a tooltip
  callback = "#! 
  function (nRow) {
        $('td', nRow).each(function (index) {
            var maxChars = 80;
                var unfilteredText = $(this).text();
                if (unfilteredText.length > maxChars && maxChars > 3) {
                    $(this).attr('title', unfilteredText);
                    $(this).html(unfilteredText.substring(0, maxChars-4) + '...');
                }
        });
        return nRow;
    } !#"

  result <- dTable(df, aaSorting = list(c(5, "desc")), sPaginationType="full_numbers",
               fnRowCallback=callback)

在 Shiny DataTables 中这可能吗?

最佳答案

我只是偶然发现了这个问题,并且能够使用此处的信息以及来自 this post 的第 4.5 节的帮助。解决这个问题。为了让它工作,您只需执行以下操作:

library(DT)
long_strings = replicate(10, paste(sample(c(0:9, letters, LETTERS), 135, replace = TRUE), collapse = ""))
dat <- data.frame(x = 1:10, 
                  y = month.abb[1:10], 
                  z = long_strings, 
                  stringsAsFactors = FALSE)
DT::datatable(dat,
              options = list(
                rowCallback = JS("function(row, data) {",
                                 "  var max_chars = 80, full_text = data[3];",
                                 "    if (full_text.length > max_chars) {",
                                 "      $('td:eq(3)', row).attr('title', full_text);",
                                 "      $('td:eq(3)', row).html(full_text.substring(0, max_chars - 4) + '...');",
                                 "    }",
                                 "}")))

重要的是要注意,因为我们希望它在每行的基础上运行,所以我们使用 optionsinside 函数 rowCallback范围。这与可以在整个表上使用的 callback 函数形成对比,它是 DT::datatable 的参数。

另请注意,您不必在 data[3] 上调用 .text().innerHTML 或任何类似的东西]。返回的值是该单元格的文本值。

希望将来有人偶然发现它并发现它有益。

关于javascript - 如何在 Shiny R 应用程序中设置 DataTables 行回调?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20824714/

相关文章:

R将线性模型传递给函数内的另一个函数

c# - 将数据表 POST 数组转换为 C# 模型

javascript - 如何将 dataTables 的 "aLengthMenu"值转换为 PHP 变量?

javascript - 当数据不在范围内时如何使用正则表达式返回 false?

javascript - 如何在变量中返回 while 循环的结果

javascript - Bootstrap 不会在相同选项卡之间反复来回切换

javascript - 在两个对象之间画一条垂直线

c++ - RcppArmadillo faSTLm 结果与 R 的 lm 不同,我做错了什么?

r - 如何识别循环中操作的警告生成实例?

javascript - 如何将数据存储到jquery数据表中的javascript全局变量