R Shiny DT с переключателями переключается при добавлении языковой опции - PullRequest
1 голос
/ 27 июня 2019

Я пытаюсь разработать своего рода форму с помощью блестящего приложения, идея состоит в том, что пользователь заполняет определенное поле (зонирование приоритета медицинского развития) во многих географических местах (французские районы).Таким образом, я считаю DT лучшим вариантом.Я не хочу делать столбец editable, потому что я хочу, чтобы пользователь выбирал между 4 конкретными значениями (идея формы состоит в том, чтобы уменьшить свободный текст, который будет очищен после этого).

Я начал сработать с примером YiHui https://yihui.shinyapps.io/DT-radio/ Поскольку я работаю для французских пользователей, я пытался добавить опцию для настройки языка на французский, но вся логика сломалась, я не знаю почему.

Вот представление: (просто закомментируйте строку с language = list(..., чтобы она заработала).

library(shiny)
library(DT)
shinyApp(
  ui = fluidPage(
    title = 'Radio buttons in a table',
    DT::dataTableOutput('foo'),
    verbatimTextOutput('sel')
  ),
  server = function(input, output, session) {
    m = matrix(
      as.character(1:5), nrow = 12, ncol = 5, byrow = TRUE,
      dimnames = list(month.abb, LETTERS[1:5])
    )
    for (i in seq_len(nrow(m))) {
      m[i, ] = sprintf(
        '<input type="radio" name="%s" value="%s"/>',
        month.abb[i], m[i, ]
      )
    }
    m
    output$foo = DT::renderDataTable(
      m, escape = FALSE, selection = 'none', server = FALSE,
      options = list(dom = 'tirp', paging = FALSE, ordering = FALSE
                     ,language = list(url = '//cdn.datatables.net/plug-ins/1.10.11/i18n/French.json')
                     ),
      callback = JS("table.rows().every(function(i, tab, row) {
          var $this = $(this.node());
          $this.attr('id', this.data()[0]);
          $this.addClass('shiny-input-radiogroup');
        });
        Shiny.unbindAll(table.table().node());
        Shiny.bindAll(table.table().node());")
    )
    output$sel = renderPrint({
      str(sapply(month.abb, function(i) input[[i]]))
    })
  }
)

Вот мой sessionInfo ()

с R 3.6.0

sessioninfo :: session_info () - Информация о сеансе ------------------------------------------------------------------ значение настройки
версия R версия 3.6.0 (2019-04-26) ОС Windows 10 x64
система x86_64, mingw32
интерфейс RStudio
язык (EN)
сопоставление French_France.1252
ctype French_France.1252
tz Европа / Париж
дата 2019-06-26

  • Пакеты ---------------------------------------------------------------------- package * version version lib source
    assertthat 0.2.12019-03-21 [1] CRAN (R 3.6.0)
    cli 1.1.0 2019-03-19 [1] CRAN (R 3.6.0)
    карандаш 1.3.4 2017-09-16 [1] CRAN (R 3.6.0)
    перекрестные помехи 1.0.0 2016-12-21 [1] CRAN (R 3.6.0)
    дайджест 0.6.19 2019-05-20 [1] CRAN (R 3.6.0)
    DT * 0.7.1 2019-06-26 [1] Github (rstudio / DT @ c6fd864) htmltools 0.3.6 2017-04-28 [1] CRAN (R 3.6.0)
    htmlwidgets 1.3 2018-09-30 [1] CRAN (R 3.6.0)
    httpuv 1.5.1 2019-04-05 [1] CRAN (R 3.6.0)
    jsonlite 1.6 2018-12-07 [1] CRAN (R 3.6.0)
    позднее 0.8.0 2019-02-11 [1] CRAN (R 3.6.0)
    magrittr 1.5 2014-11-22 [1] CRAN (R 3.6.0)
    mime 0.7 2019-06-11 [1] CRAN (R 3.6.0)
    packrat 0.5.0 2018-11-14 [1] CRAN (R 3.6.0)
    обещания 1.0.1 2018-04-13 [1] CRAN (R 3.6.0)
    R6 2.4.0 2019-02-14 [1] CRAN (R 3.6.0)
    Rcpp 1.0.1 2019-03-17 [1] CRAN (R 3.6.0)
    rlang 0.3.4 2019-04-07 [1] CRAN (R 3.6.0)
    rstudioapi 0.10 2019-03-19 [1] CRAN (R 3.6.0)
    sessioninfo 1.1.1 2018-11-05 [1] CRAN (R 3.6.0)
    блестящий * 1.3.2 2019-04-22 [1] CRAN (R 3.6.0)
    sourcetools 0.1.7 2018-04-25 [1] CRAN (R 3.6.0)
    с 2.1.2 2018-03-15 [1] CRAN(R 3.6.0)
    xtable 1.8-4 2019-04-21 [1] CRAN (R 3.6.0)
    yaml 2.2.0 2018-07-25 [1] CRAN (R 3.6.0)

Я также пытался с R 3.5.2, но у меня есть проблема сохранения.

Когда я нажимаю некоторые радио-кнопки, я должен видеть:

List of 12
 $ Jan: chr "1"
 $ Feb: chr "2"
 $ Mar: NULL
 $ Apr: NULL
 $ May: NULL
 $ Jun: NULL
 $ Jul: NULL
 $ Aug: NULL
 $ Sep: NULL
 $ Oct: NULL
 $ Nov: NULL
 $ Dec: NULL

Вместо этого он говорит NULL, я не могу найти явную ошибку.

List of 12
 $ Jan: NULL
 $ Feb: NULL
 $ Mar: NULL
 $ Apr: NULL
 $ May: NULL
 $ Jun: NULL
 $ Jul: NULL
 $ Aug: NULL
 $ Sep: NULL
 $ Oct: NULL
 $ Nov: NULL
 $ Dec: NULL

В чем проблемаопция языка в DT?

1 Ответ

1 голос
/ 27 июня 2019

Я не могу объяснить, но это работает, добавив setTimeout:

  callback = JS("table.rows().every(function(i, tab, row) {
                  var $this = $(this.node());
                  $this.attr('id', this.data()[0]);
                  $this.addClass('shiny-input-radiogroup');
                });
                Shiny.unbindAll(table.table().node());
                setTimeout(function(){
                  Shiny.bindAll(table.table().node());
                },0);")

РЕДАКТИРОВАТЬ

Вышеуказанное сработало для меня, но я установил dom = ftirp.Это не работает с tirp.Вот еще одно решение:

output$foo = DT::renderDataTable(
  m, escape = FALSE, selection = 'none', server = FALSE,
  options = list(dom = 'tirp', paging = FALSE, ordering = FALSE,
                 initComplete = JS("function(settings,json){
                                     var table = settings.oInstance.api();
                                     Shiny.unbindAll(table.table().node());
                                     Shiny.bindAll(table.table().node());}")
                 ,language = list(url = '//cdn.datatables.net/plug-ins/1.10.11/i18n/French.json')
  ),
  callback = JS("table.rows().every(function(i, tab, row) {
                  var $this = $(this.node());
                  $this.attr('id', this.data()[0]);
                  $this.addClass('shiny-input-radiogroup');
                });")
)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...