如何将点击侦听器附加到 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'
)
)
我有一个闪亮的应用程序,我尝试将 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'
)
)