加载闪亮的模板

load a template in shiny

问题: 是否有解决方法可以模拟在 server 代码中单击 actionButton

背景: 我有一个 shiny 应用程序,其中有很多用户应该输入的参数。应用程序的这一部分分为几个 UI,每个都是用 renderUI 创建的。一开始,用户只看到第一个UI。一旦她填写了字段,她应该点击一个 actionButton 并且第二个 UI 是动态生成的,第二个 UI 的字段和文本取决于内容第一个 UI.

的字段

一旦用户填写了两个 UI,我希望她能够将所有字段的内容保存为模板,并在她下次使用该应用程序时加载该模板。保存是通过简单地将所有值以结构化方式写入 csv 实现的,加载是使用 update* 函数(例如 updateNumericInputupdateTextInput 等)完成的。 .

问题是我不得不以某种方式模拟 actionButton 上的点击,因为在加载模板时,第二个 UI 尚未创建。将对模板上传按钮的依赖添加到第二个 UI 没有帮助,因为第二个 UI 需要第一个的一些值。

您可以使用一个简短的 javascript 函数来完成此操作,该函数只需调用 click() JS 函数。这是一个简短的闪亮应用程序,演示了如何执行此操作。

library(shiny)
library(shinyjs)

jscode <- "shinyjs.click = function(id) { $('#' + id).click(); }"

runApp(shinyApp(
  ui = fluidPage(
    useShinyjs(),
    extendShinyjs(text = jscode),
    actionButton("btn1", "When you click me, I print the time"),
    actionButton("btn2", "When you click me, I'll click the other button")
  ),
  server = function(input, output, session) {
    observeEvent(input$btn1, {
      print(Sys.time())
    })
    observeEvent(input$btn2, {
      js$click("btn1")
    })
  }
))

请注意,我正在使用 shinyjs 包来简化与 JS 的交互