将ID应用于标签列表中的renderDT()

时间:2019-04-26 08:53:27

标签: r shiny dt

我有一个动态接口,可以在一个巨大的函数中创建它。该函数还会列出所有输入功能和其他内容的标记列表。其中有一个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应用于此渲染?

0 个答案:

没有答案