【问题标题】:load a template in shiny加载闪亮的模板
【发布时间】:2015-10-01 19:14:22
【问题描述】:

问题:是否有一种解决方法可以模拟点击server 代码中的actionButton

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

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

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

【问题讨论】:

  • 动作按钮有计数。如果您按照我理解的方式进行操作,请使用 count +1 更新操作按钮,例如。 input$button == 0 在开始时,但如果你愿意,你可以强制它为 1。 .csv 文件的替代方法是 github.com/johndharrison/shinyStorage
  • @pops 你确定可以修改server.R 中的input 对象,除了update* 函数吗?我过去尝试过,但没有成功。

标签: r shiny


【解决方案1】:

您可以使用一个简短的 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 的交互

【讨论】:

    猜你喜欢
    • 2018-04-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-11-15
    • 2019-02-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多