Как добавить пользовательские кнопки в R Shiny Datatable?
На сайте datatables.net есть возможность добавить пользовательскую кнопку. Как это можно закодировать в приложении R Shiny? Будет здорово увидеть базовый пример кода R для одной кнопки и наблюдателя.
Вот код JS из https://datatables.net/extensions/buttons/examples/initialisation/custom.html
$(document).ready(function() {
$('#example').DataTable( {
dom: 'Bfrtip',
buttons: [
{
text: 'My button',
action: function ( e, dt, node, config ) {
alert( 'Button activated' );
}
}
]
} );
} );
Спасибо!
2 ответа
Вам не нужно использовать Javascript, за исключением действия. Ты можешь сделать:
library(DT)
datatable(iris,
extensions = 'Buttons',
options = list(
dom = 'Bfrtip',
buttons = list(
"copy",
list(
extend = "collection",
text = 'test',
action = DT::JS("function ( e, dt, node, config ) {
alert( 'Button activated' );
}")
)
)
)
)
Чтобы передать что-то из Javascript на блестящий сервер, используйте ShinySetInputValue
:
library(shiny)
library(DT)
ui <- basicPage(
DTOutput("dtable")
)
server <- function(input, output, session){
output$dtable <- renderDT(
datatable(iris,
extensions = 'Buttons',
options = list(
dom = 'Bfrtip',
buttons = list(
"copy",
list(
extend = "collection",
text = 'test',
action = DT::JS("function ( e, dt, node, config ) {
Shiny.setInputValue('test', true, priority: 'event');
}")
)
)
)
)
)
observeEvent(input$test, {
print("hello")
})
}
shinyApp(ui, server)
Я ценю ответ Стефана Лорана и нашел пропавшую вещь. должна быть пара скобок {}
priority: 'event'
лайк,
Shiny.setInputValue('test', true, {priority: 'event'});
как в https://shiny.rstudio.com/articles/communicating-with-js.html