Блестящий внешний вид DT портится, когда выбранные строки используются в качестве реактивных значений - PullRequest
0 голосов
/ 26 июня 2018

Таблицы, отображаемые через интерфейс DataTables из пакета DT, выглядят грязными (например, неупорядоченные элементы, странно выглядящие пагинации ...) при использовании реактивных значений, которые вводятся из строк, выбранных в первой таблице. Используя версию R 3.4.3, и блестящие 1.1.0 и DT 0.4, которые оба получены из CRAN.

Минимальный код:

library(shiny)
library(DT)

ui <- fluidPage(
  DT::dataTableOutput("dt"),
  actionButton("go", "Go"),
  wellPanel(DT::dataTableOutput("selected"))
)

server <- function(input, output, session) {
  output$dt <-  DT::renderDataTable({
    DT::datatable(
      mtcars,
      style = 'bootstrap',
      filter = 'top',
      rownames = FALSE,
      extensions = 'Buttons',
      selection = list(mode = 'single'),
      options = list(
        pageLength = 10,
        dom = '<"top"ifl>t<"bottom"Bp>',
        buttons = c('copy', 'csv', 'excel'),
        searchHighlight = TRUE
      )
    )
  })

  rv <- reactiveValues(val = FALSE)
  observeEvent(input$go, {
    rv$val <- input$go
  })
  observeEvent(input$dt_rows_selected, {
    rv$val <- FALSE
  })

  output$selected <- DT::renderDataTable({
    if (rv$val == FALSE)
      return()

    reactive({
      validate(need(input$dt_rows_selected != "", "Select a row."))
      mtcars[input$dt_rows_selected, ]
    }) -> .mtcars

    isolate({
      DT::datatable(
        .mtcars(),
        style = 'bootstrap',
        filter = 'top',
        rownames = FALSE,
        extensions = 'Buttons',
        selection = list(mode = 'single'),
        options = list(
          pageLength = 10,
          dom = '<"top"ifl>t<"bottom"Bp>',
          buttons = c('copy', 'csv', 'excel'),
          searchHighlight = TRUE
        )
      ) -> table
    })
    table
  })

}

shinyApp(ui, server)

выглядит неплохо без второй таблицы:

1 Ответ

0 голосов
/ 30 июня 2018

Проблема вызвана деталью style = 'bootstrap', которая плохо работает с return(NULL). Замена if (rv$val == FALSE) return() на req(rv$val) в выводе решила проблему. Взял ссылку здесь .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...