У меня динамический интерфейс, который создается в огромной функции. Функция выдает список тегов со всеми входными функциями и другими вещами. Среди них таблица 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)
Есть ли какое-либо применение идентификатора, возможно, уже в списке тегов для этого рендера?