2015-10-13 138 views
1

这是关于此链接中提供的列渲染示例(4.4)的Q. http://rstudio.github.io/DT/options.html闪亮列渲染错误

我已经实现上述示例代码缩写字符串宽度大于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

条件data.length > 100是不够的:您需要确保data是第一个字符串。在你的情况下,data可能是null(从R的NA转换为JavaScript),并且null.length将触发错误。用更严格的条件更换

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

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

这是传递参数的正确方法?我没有得到任何显示'columnDefs = list(list(' ' targets = 6,' 'render = JS(' '“function(data,type,row,meta){”,' ''return type ==='display'“,' ''typeof data ==='string'&& data.length> 100?”,' '''''+' 'data.substr(0,100)+'...':data;”,“}”))),' – user5249203

+0

'“return type ==='display'&& data.length > 100?“,” '“typeof data ==='string'”,'This不显示任何文本。上面的注释中的代码显示第6列的“True”。请让我知道,如果我错误地传递参数。谢谢 – user5249203

+0

Hii yuhi,非常感谢。实现你编辑过的代码给出了一个弹出式警告''datatables.net/manual/tech-notes/4的行0检查注释未知参数6'。当我单击确定时,它不会在第6列中显示文本。所以,我按照文本注释中描述的疑难解答步骤操作。我试图实现'defaultContent:“”'作为null列6没有显示任何表。请在Q. – user5249203