启动闪亮应用程序时如何选择数据表的第一行?

问题描述 投票:0回答:1

我想在启动时选择数据表的第一行。我打算使用这个 JS 片段,但不确定它是否正确:

dataTable.row(':eq(0)').select();

使用回调

它不起作用:

library(shiny)
library(DT)

js <- c(
  "table.on('initComplete', function(settings, json) {",
  "  this.row(':eq(0)').select();",
  "  }",
  "});"
)

ui <- fluidPage(
  DTOutput("table")
)


server <- function(input, output, session) {
  output$table <- renderDT({
    datatable(
      mtcars,
      callback = JS(js)
    )
  })
}

shinyApp(ui, server, options = list(
  launch.browser = TRUE
))

即时访问表格

但我不知道如何从我闪亮的应用程序中找到变量名称:

library(shiny)
library(shinyjs)
library(DT)

ui <- fluidPage(
  useShinyjs(),
  DTOutput("table")
)


server <- function(input, output, session) {
  output$table <- renderDT({
    datatable(
      mtcars
    )
  })
  
  ### I need to know the `dataTableVariable`
  runjs("dataTableVariable.row(':eq(0)').select();")
}

shinyApp(ui, server, options = list(
  launch.browser = TRUE
))
javascript r shiny dt
1个回答
1
投票

请注意,您的

callback
的一个问题是末尾有一个
}
太多。通过一些小的修改,我们可以将
callback
传递给
initComplete
dataTable
选项,然后它就会起作用:

library(shiny)
library(DT)

js <- c(
    "function() {",
    "  $(this.api().table().row(':eq(0)').node()).addClass('selected');",
    "}"
)

ui <- fluidPage(
    DTOutput("table")
)


server <- function(input, output, session) {
    output$table <- renderDT({
        datatable(
            mtcars,
            options = list(
                initComplete = JS(js)
            )
        )
    })
}

shinyApp(ui, server)

另一种可能性是直接在应用程序内设置定义:

library(shiny)
library(DT)

js <- "
$('#table').on('init.dt', function() {
    $(this).find('tbody tr:first-child').addClass('selected');
});
"

ui <- fluidPage(DTOutput("table"),
                tags$script(JS(js)))

server <- function(input, output, session) {
    output$table <- renderDT({
        datatable(mtcars)
    })
}

shinyApp(ui, server)
© www.soinside.com 2019 - 2024. All rights reserved.