闪亮的DataTable页脚回调总和 [英] shiny DataTables footer Callback sums

查看:204
本文介绍了闪亮的DataTable页脚回调总和的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在为回调函数 DataTables / code>应用程序类似于此示例 DataTables 论坛。我的想法远远没有阅读 DT 文件(第4.4节)认为可能通过 columnDefs 参数应用相同的类 sum 选项,但如果我只是知道在哪里放置JS参数手动进行类似链接,这也是有道理的。

I'm working on implementing a callback function for DataTables in a shiny app similar to this example from the DataTables forum. My thought so far from reading the DT documentation (section 4.4) was that it might be possible to apply the same class sum through the columnDefs argument of options as below, but it would also make sense if I just knew where to put the JS argument to do the classes manually like in the link.

您可以删除所有 columnDefs 回调参数看一个例子的起点。

You can delete all the columnDefs and callback arguments to see an example starting point.

app.R

library(shiny)
library(DT)

ui <- fluidPage(

  title = 'Select Table Rows',

  hr(),

  h1('A Server-side Table'),

  fluidRow(
    column(9, DT::dataTableOutput('x3'))
  )

)


server <- function(input, output, session) {

  # server-side processing
  mtcars2 = mtcars[, 1:8]
  output$x3 = DT::renderDataTable(DT::datatable(mtcars2, 
                                                extensions = 'Buttons',
                                                options = list(
                                                  scrollX = TRUE,
                                                  scrollY = TRUE,
                                                  pageLength = 10,
                                                  order = list(list(1, 'asc')),
                                                  fixedHeader = TRUE,
                                                  dom = 'Blrtip',
                                                  buttons = c('copy', 'csv', 'excel', 'pdf', 'print')
                                                #  columnDefs = JS("[
                                                #                  { className: 'sum', 'targets': [ 1,2 ] }
                                                #                  ]") 
                                                #  ),
                                                #callback =  JS(
                                                #  " function(row, data, start, end, display) {
                                                #  var api = this.api();
                                                #  
                                                #  api.columns('.sum', { page: 'current' }).every(function () {
                                                #  var sum = api
                                                #  .cells( null, this.index(), { page: 'current'} )
                                                #  .render('display')
                                                #  .reduce(function (a, b) {
                                                #  var x = parseFloat(a) || 0;
                                                #  var y = parseFloat(b) || 0;
                                                #  return x + y;
                                                #  }, 0);
                                                #  console.log(this.index() +' '+ sum); //alert(sum);
                                                #  $(this.footer()).html(sum);
                                                #  });
                                    #}"
                          )       
                )
      )
  }

shinyApp(ui = ui, server = server)


推荐答案

为了显示页脚中的总数/总数,您必须添加一个容器到你的桌面,如下所示,我也改变了JS代码:下面提供的版本必须工作,不幸的是,我不知道你的JS代码是什么问题,因为我不是javascript的人,你可以玩HTML( ...)

In order to show the sum/total in the footer, you have to add a container to your table as done below. I also changed the JS code: the version provided below must work. Unfortunately, I cannot tell what was wrong with your JS code as I am not the javascript guy. You can play with the HTML(...) part to change the presentation of your sums.

server <- function(input, output, session) {

# server-side processing
  mtcars2 = mtcars[, 1:8]
      sketch = htmltools::withTags(table(tableFooter(c("",0,0,0,0,0,0,0,0))))
      output$x3 = DT::renderDataTable(DT::datatable(mtcars2, 
                                                    extensions = 'Buttons',
                                                    options = list(
                                                      scrollX = TRUE,
                                                      scrollY = TRUE,
                                                      pageLength = 10,
                                                      order = list(list(1, 'asc')),
                                                      fixedHeader = TRUE,
                                                      dom = 'Blrtip',
                                                      buttons = c('copy', 'csv', 'excel', 'pdf', 'print')

                                                      footerCallback =  JS(
                                                    "function( tfoot, data, start, end, display ) {",
                                                    "var api = this.api();",
                                                    "$( api.column( 1 ).footer() ).html(",
                                                    "api.column( 1).data().reduce( function ( a, b ) {",
                                                    "return a + b;",
                                                    "} )",
                                                    ");",
                                                    "$( api.column( 2 ).footer() ).html(",
                                                    "api.column( 2 ).data().reduce( function ( a, b ) {",
                                                    "return a + b;",
                                                    "} )",
                                                    ");",
                                                    "$( api.column( 3 ).footer() ).html(",
                                                    "api.column( 3 ).data().reduce( function ( a, b ) {",
                                                    "return a + b;",
                                                    "} )",
                                                    ");",
                                                    "$( api.column( 4 ).footer() ).html(",
                                                    "api.column( 4 ).data().reduce( function ( a, b ) {",
                                                    "return a + b;",
                                                    "} )",
                                                    ");",
                                                    "$( api.column( 5 ).footer() ).html(",
                                                    "api.column( 5 ).data().reduce( function ( a, b ) {",
                                                    "return a + b;",
                                                    "} )",
                                                    ");",
                                                    "$( api.column( 6 ).footer() ).html(",
                                                    "api.column( 6 ).data().reduce( function ( a, b ) {",
                                                    "return a + b;",
                                                    "} )",
                                                    ");",
                                                    "$( api.column( 7 ).footer() ).html(",
                                                    "api.column( 7 ).data().reduce( function ( a, b ) {",
                                                    "return a + b;",
                                                    "} )",
                                                    ");",
                                                    "$( api.column( 8 ).footer() ).html(",
                                                    "api.column( 8 ).data().reduce( function ( a, b ) {",
                                                    "return a + b;",
                                                    "} )",
                                                    ");",
                                                    "}")
                                                )       
  )
  )
}

这篇关于闪亮的DataTable页脚回调总和的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆