如何解决使用Java脚本删除Shiny应用程序中的DataTable行
我正在尝试使用Javascript从Shiny应用程序的数据表中删除行。在表中,我有一列,每一行都有一个“删除”按钮。这或多或少是我想要做的,但是我无法使其正常工作。
在我的服务器中。R:
initComplete <- DT::JS(
"function () {"," var table = this.api();"," $('#delete_button').on('click',function() {"," table.row($(this).parents('tr')).remove().draw();"," });","}"
)
shinyInput <- function(FUN,len,id,...) {
inputs <- character(len)
for (i in seq_len(len)) {
inputs[i] <- as.character(FUN(paste0(id,i),...))
}
inputs
}
output$under_list <- renderDataTable({
list_under <- getListUnder() # this is a reactive
list_under$Delete <- shinyInput(actionButton,nrow(list_under),'delete_',label = "Delete",icon=icon("trash"),style = "color: red;background-color: white",onclick = paste0("Shiny.setInputValue( \"delete_button\",this.id,{priority: \"event\"})"))
table <- list_under %>%
DT::datatable(filter = "none",rownames = F,extensions = 'FixedColumns',options = list(pageLength = 10,scrollX = TRUE,fixedColumns = list(leftColumns = 2),initComplete = initComplete),escape=F
) %>%
formatCurrency(c(5,8,9,11,15),digits=2,currency='€') %>%
formatPercentage(13:14)
})
解决方法
library(DT)
library(shiny)
rowNames = FALSE # whether to show row names
colIndex <- as.integer(rowNames)
dat = iris[1:5,]
dat[["Action"]] <- vapply(seq_len(nrow(dat)),function(i){
as.character(tags$button("delete",id = paste0("delete-",i),`data-index` = i))
},FUN.VALUE = character(1L))
dat[["rowId"]] <- paste0("row-",seq_len(nrow(dat)))
callback <- JS(
'$("button[id^=delete]").on("click",function() {',' var index = $(this).data("index");',' var rowId = "#row-" + index;',' table.row(rowId).remove().draw();','});'
)
datatable(
dat,rownames = rowNames,escape = -ncol(dat)+1L,callback = callback,options = list(
rowId = JS(sprintf("function(data){return data[%d];}",ncol(dat)-1L+colIndex)),columnDefs = list(
list(visible = FALSE,targets = ncol(dat)-1L+colIndex),list(className = "dt-center",targets = "_all")
)
)
)
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。