闪亮的列渲染错误

时间:2015-10-13 16:17:22

标签: r shiny dt

这是此链接中提供的列呈现示例(4.4)上的Q. https://developer.ibm.com/mobilefirstplatform/documentation/getting-started-7-1/foundation/hello-world/integrating-mfpf-sdk-in-cordova-applications/

我已经实现了上面描述的示例代码,使用前100个字符加省略号(...)来缩写宽度超过100个字符的字符串,当鼠标悬停在单元格上时,完整字符串显示为工具提示。只要具有自定义渲染的列中包含完整文本,这就可以正常工作。但是,当遇到空单元格时,表格不会显示,并显示"处理..."在闪亮的浏览器上在禁用此自定义呈现时,我能够按预期显示包含空字段的表。 有没有人有类似的问题,有什么建议可以克服这个问题?

以下是我的自定义列呈现代码。

output$PM_output <- DT::renderDataTable(
    expr =  DT::datatable(PubmedOutput(PubmedSearch()),
                          class   = 'cell-border stripe compact hover',
                          escape  = F, selection = 'multiple',
                          options = list(
                            initComplete = JS("function(settings, json) {",
                                "$(this.api().table().header()).css({
                                'background-color': '#303030',
                                'color': '#FFFF00'});","}"),
                            autoWidth  = T,
                            LengthMenu = c(5, 30, 50),
                             columnDefs = list(list(
                               targets  = 6,
                               render   = JS(
                                 "function(data, type, row, meta) {",
                                 "return type === 'display' && data.length > 100 ?",
                                 "'<span title=\"' + data + '\">' +
                                 data.substr(0, 100) + '...</span>' : data;", "}"))),
                            columnDefs = list(list(
                              targets  = c(1:8),
                              className = 'dt-center')),
                            pageLength = 1, server = T)))

生成我已通过自定义渲染的第6列的代码。

PM.ID <- c("26391251","26372702","26372699","26371045") # does not output table
fetch.pubmed <- entrez_fetch(db = "pubmed", id = PM.ID,
                             rettype = "xml", parsed = T)
abstracts = xpathApply(fetch.pubmed, '//PubmedArticle//Article', function(x) xmlValue(xmlChildren(x)$Abstract))
abstracts #  ID 26372702, 26372699 has no abstract. and returns NA

任何意见和建议。 P.S:除了省略号/工具提示之外,还有更好的方法来显示数据吗? 代码太大而无法将其全部粘贴,因此只选择我注意到问题的部分。我希望它有所帮助。

1 个答案:

答案 0 :(得分:1)

条件data.length > 100是不够的:您需要先确保data是一个字符串。在您的情况下,data可能是null(从R的NA转换为JavaScript),null.length会触发错误。取代

type === 'display' && data.length > 100

条件更严格:

type === 'display' && typeof data === 'string' && data.length > 100