Ошибка рендеринга блестящего столбца

Это Q в примере рендеринга столбца (4.4), приведенном по этой ссылке. 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: Есть ли лучший способ отображения данных, кроме многоточия / всплывающей подсказки? код слишком велик, чтобы вставить его все, поэтому я выбрал только те части, где я заметил проблему. Я надеюсь, что это помогает.


person user5249203    schedule 13.10.2015    source источник


Ответы (1)


Условия data.length > 100 недостаточно: сначала нужно убедиться, что data является символьной строкой. В вашем случае data может быть null (преобразовано из NA R в JavaScript), а null.length вызовет ошибку. Заменять

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

с более строгим условием:

type === 'display' && typeof data === 'string' && data.length > 100
person Yihui Xie    schedule 13.10.2015
comment
Это правильный способ передачи аргументов? Текст не отображается columnDefs = list(list( targets = 6, render = JS( "function(data, type, row, meta) {", "return type === 'display'", "typeof data === 'string' && data.length > 100 ?", "'<span title=\"' + data + '\">' + data.substr(0, 100) + '...</span>' : data;", "}"))), - person user5249203; 13.10.2015
comment
"return type === 'display' && data.length > 100 ? ", "typeof data === 'string' ", Текст не отображается. Код в приведенном выше комментарии отображает значение True для столбца 6. Сообщите мне, неверен ли способ передачи аргументов. Спасибо - person user5249203; 13.10.2015
comment
Hii yuhi, Спасибо большое. При реализации отредактированного кода появилось всплывающее предупреждение unknown parameter 6 for row 0 check notes in datatables.net/manual/tech-notes/4. Когда я нажал кнопку «ОК», в столбце 6 не отображался текст. Итак, я выполнил действия по устранению неполадок, описанные в текстовых примечаниях. Я попытался реализовать defaultContent:" " как null для столбца 6, в котором не отображалась никакая таблица. Пожалуйста, найдите новый отредактированный код в Q. - person user5249203; 14.10.2015
comment
Я считаю defaultContent совершенно неуместным. Вставьте именно то, что вы пробовали, прежде чем начать defaultContent. - person Yihui Xie; 14.10.2015
comment
Найдите Edit-2 с полным кодом. Это дает предупреждение, о котором я упоминал в предыдущем комментарии. Когда я нажимаю ОК во всплывающем окне, отображается таблица, но ничего не отображается в столбце 6. - person user5249203; 14.10.2015
comment
Вы не следовали тому, что я написал выше: вы удалили return внутри функции JS. Просто вставьте typeof data === 'string' && в условие и больше ничего не трогайте. - person Yihui Xie; 14.10.2015
comment
Ах ... !! Сейчас это решено. и он работает. Спасибо - person user5249203; 14.10.2015
comment
Можете ли вы направить меня к материалу, где я могу узнать, как передавать аргументы JS в Rshiny? Например, я не нашел аргумент typeof data === 'string' на сайте Rstudio на github? Я понятия не имею, что могу передавать подобные аргументы. - person user5249203; 14.10.2015
comment
Вам нужно будет изучить JavaScript, это другой язык. У меня нет книги или веб-сайта, которые можно было бы порекомендовать вам, но я уверен, что в Интернете есть миллионы руководств :) - person Yihui Xie; 14.10.2015