在rCharts中,可以使用特殊的字符串表示法设置DataTables的JS回调:#! function(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中使用?
答案 0 :(得分:1)
我偶然发现了这个问题,并且可以使用此处的信息,以及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) + '...');",
" }",
"}")))
重要的是要注意,由于我们希望每行操作,因此我们使用rowCallback
参数中的options
函数 。这与可以在整个表上使用的callback
函数形成对比,整个表是DT::datatable
的自己的参数。
另请注意,您无需在.text()
上致电.innerHTML
或data[3]
或任何此类事件。返回的值是该单元格的文本值。
希望将来有人能够遇到这种情况并发现它有益。