簡體   English   中英

如何將單擊偵聽器附加到 DT 和 Shiny 中的數據表?

[英]How do I attach a click listener to a datatable in DT and Shiny?

我有一個閃亮的應用程序,我嘗試將連接click收聽到一個datatable的行。

這是我的代碼:

require(DT)
require(data.table)

ui <- fluidPage(
    fluidRow(
        titlePanel("Data Explorer")
    ),
    fluidRow(
        column(
            DT::dataTableOutput("listTable"),
            width = 4
        ),
        column(
            width = 8
        )
    )
)

get.data <- function() {
    res <- data.table(a = c(1,2,3), b = c(4,5,6))
    return(res)
}

server <- function(input, output) {
    output$listTable <- DT::renderDataTable({
        showModal(modalDialog("Fetching Data..."))
        dt <- datatable(get.data(), 
                        rownames = FALSE, 
                        options = list(autoWidth = TRUE,
                                       selection = 'none',
                                       callback = JS("$('#listTable tbody').on('click.dt', 'tr', function() { console.log('foo'); })")))
        removeModal()
        return(dt)
    })
}

shinyApp(ui = ui, server = server)

我通過谷歌搜索找到的所有示例都使用隱式提供的table變量來查找根元素,但是當我嘗試這樣做時,我只得到一個ReferenceError: table is not defined

所以我改用了直接的 JQuery 搜索。 當我使用console.log('foo')作為回調時,它工作正常。 但是當我像上面那樣嘗試附加一個偵聽器時,它沒有附加。 當我將完全相同的代碼復制粘貼到頁面上的 Firefox 控制台時,它就可以工作了。

這里有什么問題?

callback是的參數datatable功能,它不屬於options列表。 所以你必須這樣做:

dt <- datatable(
  get.data(), 
  rownames = FALSE, 
  callback = JS("table.on('click', 'tr', function() { alert('foo'); })"),
  options = list(
    autoWidth = TRUE,
    selection = 'none'
  )
)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM