применить идентификатор к renderDT () в списке тегов - PullRequest
0 голосов
/ 26 апреля 2019

У меня динамический интерфейс, который создается в огромной функции. Функция выдает список тегов со всеми входными функциями и другими вещами. Среди них таблица DT. Это все хорошо и работает отлично. Теперь я хочу иметь возможность replaceData () в DT, однако при создании списка тегов я могу назначить elementID для datatable (), но renderDT перезаписывает это.

Если я опускаю renderDT (), таблица все равно будет отображаться, но replaceData () завершится с ошибкой

Предупреждение DataTables: идентификатор таблицы = DataTables_Table_0 - неверный ответ JSON. Для получения дополнительной информации об этой ошибке см. http://datatables.net/tn/1

сообщение об ошибке.

Текущее работающее, но действительно плохое решение: Если у меня есть renderDT (), создается некоторый хэшированный идентификатор, который запускается «out». Это можно отследить в Наблюдении () и использовать для создания объекта datatableProxy (), который затем можно использовать для замены ДД (). Проблема в том, что вы можете иметь только одну таблицу, и это ужасно.

уже есть проблема с DT git: https://github.com/rstudio/DT/issues/567, но нет решения.

library(shiny)

ui <- fluidPage(

 uiOutput("inputs")

)

server <- function(input, output, session) {

  output$inputs <- renderUI({
    tagList( h1("a table has no id")
            ,renderDT(datatable(mtcars,elementId = "thisDoesHaveAnID"))
            ,actionButton("replaceDataGo","Replace data go!")
            )
  })

  observeEvent(input$replaceDataGo,{
    tableid <- gsub("_.*","",names(input)[grep("out.*",names(input))][1])
    tableProxy <- dataTableProxy(tableid,session = session)
    replaceData(tableProxy,mtcars[1:input$replaceDataGo,])
  })

}

shinyApp(ui, server)

Есть ли какое-либо применение идентификатора, возможно, уже в списке тегов для этого рендера?

...