如何在R Shiny数据表中添加自定义按钮?

时间:2018-12-03 19:54:40

标签: r user-interface button shiny dt

有一个选项可以在datatables.net网站上添加自定义按钮。如何在R Shiny应用中进行编码?一个按钮和观察者的基本R代码示例将非常有趣。

这是https://datatables.net/extensions/buttons/examples/initialisation/custom.html上的JS代码

$(document).ready(function() {
    $('#example').DataTable( {
        dom: 'Bfrtip',
        buttons: [
            {
                text: 'My button',
                action: function ( e, dt, node, config ) {
                    alert( 'Button activated' );
                }
            }
        ]
    } );
} );

谢谢!

2 个答案:

答案 0 :(得分:4)

除了操作之外,您不需要使用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传递到闪亮的服务器,请使用Shiny.setInputValue

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)

答案 1 :(得分:2)

我很欣赏斯蒂芬·洛朗的回答,并找到了丢失的东西。

周围必须有一对括号{}
class Month: Object {

    @objc dynamic public private(set) var id = UUID().uuidString
    @objc dynamic public private(set) var month = Date()
    @objc dynamic public private(set) var beg:Int = 0

    override class func primaryKey() -> String {
        return "id"
    }
}

喜欢

priority: 'event'

https://shiny.rstudio.com/articles/communicating-with-js.html