我有一个动态接口,可以在一个巨大的函数中创建它。该函数还会列出所有输入功能和其他内容的标记列表。其中有一个DT表。一切都很好,而且效果很好。现在,我希望能够在DT中替换replaceData(),但是在创建标记列表时,我可以将elementID分配给datatable(),但是renderDT会覆盖它。
如果我忽略了renderDT(),该表仍会显示,但是replaceData()失败并显示
DataTables警告:表id = DataTables_Table_0-无效的JSON响应。 有关此错误的更多信息,请参见http://datatables.net/tn/1
错误消息。
当前有效但非常糟糕的解决方案::如果我具有renderDT(),则会创建一些散列ID,该ID以“ out”开头。这可以在observe()中捕获,并用于创建datatableProxy()对象,然后可以将其用于replaceData()。这样做的问题是您只能拥有一个表格,这太糟糕了。
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)
是否有可能将标签列表中的ID应用于此渲染?