为闪亮的 DT 表搜索生成器扩展输入添加书签

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

我正在寻找一种方法,将闪亮的书签功能与闪亮的 DT 包和搜索生成器扩展一起使用。这个想法是能够为用户设置的自定义搜索构建器参数(以及应用程序中需要的其他内容)添加书签,这样他们就不必在每次加载应用程序时不断输入。

谢谢,

亚伦

r shiny dt
1个回答
0
投票

我认为闪亮的书签功能不可能做到这一点。但这里有一种方法,可以通过单击按钮将搜索查询保存到 JSON 文件,然后可以上传此文件以重建查询。

library(shiny)
library(DT)

js <- c(
  "$('#save').on('click', function() {",
  "  var query = table.searchBuilder.getDetails();",
  "  var json = JSON.stringify(query, null, '\t');",
  "  var a = document.createElement('a');",
  "  var file = new Blob([json], {type: 'text/plain'});",
  "  a.href = URL.createObjectURL(file);",
  "  a.download = 'query.json';",
  "  a.click();",
  "});",
  "$('#upload').on('change', function(e) {",
  "  var reader = new FileReader();",
  "  reader.onload = function(event) {;",
  "    var query = JSON.parse(event.target.result);",
  "    table.searchBuilder.rebuild(query);",
  "  }",
  "  reader.readAsText(e.target.files[0]);",
  "});"
)


ui <- fluidPage(
  br(),
  actionButton("save", "Save query", class = "btn-primary"),
  br(),
  tags$label(`for` = "upload", "Upload query"),
  tags$input(
    id = "upload", type = "file", accept = "application/json"
  ),
  br(),
  DTOutput("dtable")
)

server <- function(input, output, session) {
  
  output$dtable <- renderDT({
    datatable(
      iris,
      extensions = c("SearchBuilder", "DateTime"),
      options = list(
        dom = "Qlfrtip",
        searchBuilder = TRUE
      ),
      callback = JS(js)
    )
  }, server = FALSE)
  
}

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