скачать отредактированную таблицу данных выдает предупреждение в блестящем приложении - PullRequest
0 голосов
/ 01 октября 2019

Вот пример блестящего приложения, которое позволяет пользователю загружать редактируемые таблицы. Пользователь может нажать на кнопку csv в левом верхнем углу, чтобы загрузить таблицу.

Однако я обнаружил, что после того, как я отредактировал любую ячейку в таблице (дважды щелкнув мышью на любой ячейке и изменив ее содержимое), когда я нажимаю кнопку csv, введите имя файла и сохраните, я получил предупреждениекак показано ниже:

dataTables warning: table id=DataTables_Table_3 - invalid json response. 
For more information about this error, please see http://datatables.net/tn/1

Хотя мне все еще удавалось сохранить таблицу в виде csv-файла, предупреждающее сообщение очень раздражает.

Это происходит только после добавления аргумента server=FALSE в функцию renderDT. Причина, по которой мне нужно server=FALSE, заключается в том, что без этого приложение загружает только первую страницу папки (пропуская все остальные данные после сохранения).

Другая проблема заключается в том, что после того, как я редактирую ячейку, если я отмечаю / снимаю отметку с некоторых столбцов, отредактированная ячейка возвращается к своему первоначальному значению.

Кто-нибудь знает, как решить эти проблемы?

Большое спасибо.

Пример блестящего приложения ниже:

library(shiny)
library(DT)
library(dplyr)

shinyApp(
    # UI
    ui = fluidPage(DT::dataTableOutput('tbl'),
                   checkboxGroupInput('datacols', 
                                      label='Select Columns:',
                                      choices= c('Sepal.Length', 'Sepal.Width', 'Petal.Length', 'Petal.Width', 'Specie'),
                                      selected = c('Sepal.Length', 'Sepal.Width', 'Petal.Length', 'Petal.Width', 'Specie'),
                                      inline=TRUE )

                   ),

    # SERVER
    server = function(input, output) {



        df = reactiveValues()

        observe ({

            df$dat = iris %>% select(one_of(input$datacols))
        })
        # render DT
        output$tbl = renderDT(server=FALSE, {
                datatable(df$dat,
                editable = "cell",
                extensions = "Buttons",
                options = list(
                    dom = "Bfrtip", buttons = list("csv")))

        })


        observeEvent(input[["tbl_cell_edit"]], {
            cellinfo <- input[["tbl_cell_edit"]]
            df$dat  <- editData(df$dat,  input[["tbl_cell_edit"]], "tbl")
        })

    }
)

1 Ответ

1 голос
/ 01 октября 2019

Это потому, что вы используете прокси с server = FALSE. Тебе не следует. Делайте

observeEvent(input[["tbl_cell_edit"]], {
  cellinfo <- input[["tbl_cell_edit"]]
  df$dat <- editData(df$dat,  input[["tbl_cell_edit"]])
})

, а не

observeEvent(input[["tbl_cell_edit"]], {
  cellinfo <- input[["tbl_cell_edit"]]
  df$dat <- editData(df$dat,  input[["tbl_cell_edit"]], "tbl")
})

Если вы хотите загрузить всю таблицу с server = TRUE, см. это обсуждение .

...