我有一个闪亮的服务器应用程序,用户可以在其中编辑数据表,然后一些反应性摘要统计信息会相应更新。我在一个相当慢的框架上托管这个应用程序,这就是为什么我想使用客户端处理进行 DT 渲染,即server = F
传递给DT::renderDataTable
。让我分解一下我的问题的要点:
DataTables 警告:表 id=DataTables_Table_5 - 无效 JSON
回复。有关此错误的更多信息,请参阅http://datatables.net/tn/1 http://datatables.net/tn/1
有趣的是,当这个错误窗口消失时,依赖的摘要统计数据根据编辑正确更新,并且 Shiny 应用程序继续。因此,除了错误之外,一切正常。我应该指出,我访问了错误中提到的网站,但没有变得更明智。
下面的可重现示例:
library(shiny)
library(DT)
dt = data.frame(V1 = c(1,2), V2 = c(3,4))
server <- function(input, output, session) {
val = reactiveValues(mat = data.table(dt))
output$testDT = renderDataTable({
DT::datatable(val$mat, editable = TRUE)
}, server = FALSE)
proxy = dataTableProxy('testDT')
observeEvent(input$testDT_cell_edit, {
info = input$testDT_cell_edit
str(info)
i = info$row
j = info$col
v = info$val
if (j == 1){
val$mat$V1[i] = DT::coerceValue(v, val$mat$V1[i])
replaceData(proxy, val$mat, rownames = FALSE)
}
})
}
ui <- fluidPage(
dataTableOutput('testDT')
)
shinyApp(ui, server)
Thanks!
已经回答了Github 线程 https://github.com/rstudio/DT/issues/598我在这里分享我的答案。
可能没有明确记录。与编辑无关。这是因为replaceData()
calls reloadData()
,这就需要服务器端处理模式。看?reloadData()
.
reloadData() 仅适用于服务器端处理模式下的表,例如使用 renderDataTable(server = TRUE) 渲染的表。要重新加载的数据(即传递给 dataTableAjax() 的数据)必须具有与表中前一个数据对象完全相同的列数。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)