R数据表中的嵌入式输入-javascript问题

R数据表中的嵌入式输入-javascript问题,javascript,r,shiny,datatables,dt,Javascript,R,Shiny,Datatables,Dt,我有一个R/Shining应用程序,其中包含DT包中的数据表 按照这个思路,我已经能够将操作按钮嵌入到我的datatable中的一列中,这将触发一组相应的观察者 但是,当对数据表进行分页时,“我的操作”按钮将仅对第一页上的那些按钮正常工作。后续页面上的按钮不起作用。即使我使用列排序对数据重新排序,情况仍然如此,因为在初始呈现时第2页上的任何按钮即使在第1页上重新排序也无法工作 我认为问题在于回调参数是如何使用javascript(不幸的是,这超出了我的理解范围)正确呈现动作按钮的。有人能建议如何

我有一个R/Shining应用程序,其中包含DT包中的数据表

按照这个思路,我已经能够将操作按钮嵌入到我的datatable中的一列中,这将触发一组相应的观察者

但是,当对数据表进行分页时,“我的操作”按钮将仅对第一页上的那些按钮正常工作。后续页面上的按钮不起作用。即使我使用列排序对数据重新排序,情况仍然如此,因为在初始呈现时第2页上的任何按钮即使在第1页上重新排序也无法工作

我认为问题在于回调参数是如何使用javascript(不幸的是,这超出了我的理解范围)正确呈现动作按钮的。有人能建议如何在后续页面上使用操作按钮吗

这是我的最小reprex,使用mtcars数据:

library(shiny)
library(DT)

ui <- fluidPage(
    titlePanel("reprex1")
    ,fluidRow(
        dataTableOutput("dt1")
    )
)

server <- function(input, output) {
    output$dt1 <- renderDataTable({
        mtlocal <- mtcars
        for(n in 1:nrow(mtlocal)){
            mtlocal$actionbutton[[n]] <- as.character(
                actionButton(
                    paste0("buttonpress",n), label = paste0("buttonpress",n)
                )
            )
        }
        datatable(
            mtlocal
            ,escape = FALSE
            ,selection = "none"
            ,callback = JS("table.rows().every(function(i, tab, row) {
        var $this = $(this.node());
        $this.attr('id', this.data()[0]);
        $this.addClass('shiny-input-container');
      });
      Shiny.unbindAll(table.table().node());
      Shiny.bindAll(table.table().node());")
        )
    }, server = FALSE)

    lapply(
        1:nrow(mtcars),function(x){
            observeEvent(
                input[[paste0("buttonpress",x)]],{
                    showModal(
                        modalDialog(
                            h2(paste0("You clicked on button ",x,"!"))
                        )
                    )
                }
            )       
        }
    )
}

# Run the application 
shinyApp(ui = ui, server = server)
库(闪亮)
图书馆(DT)

ui只执行一次
回调
,然后重新绘制表时,
闪亮。绑定/取消绑定
丢失。您必须使用选项
preDrawCallback
drawCallback

datatable(
mtlocal
,escape=FALSE
,selection=“无”
,选项=列表(
preDrawCallback=JS('function(){shinny.unbindAll(this.api().table().node();}'),
drawCallback=JS('function(){shinny.bindAll(this.api().table().node());}'))
)
)