首页 > 解决方案 > R ShinyAce:非反应性复选框输入

问题描述

我正在用 ShinyAce 编写一个闪亮的应用程序以显示反应代码。我使用https://trestletech.github.io/shinyAce/的第一个示例作为我的代码的基础,但我遇到了关于反应式复选框输入的问题。

我想反应性地显示一些代码:例如,如果我勾选一个框,则会出现一些代码,如果我取消勾选它,代码就会恢复正常。这适用于 actionButton(参见网站上的示例),但我无法弄清楚为什么它不适用于 checkboxInput。

这是一个可重现的示例:

library(shiny)
library(shinyAce)

init <- "first text"

ui <- shinyUI(
  pageWithSidebar(
    headerPanel(""),
    sidebarPanel(
      actionButton("reset", "Reset"),
      checkboxInput("test", "Test", FALSE)
    ),
    mainPanel(
      aceEditor(
        outputId = "ace",
        selectionId = init
      )
    )
  )
)

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

  observe({
    cat(input$ace, "\n")
  })

  observeEvent(input$reset, {
    updateAceEditor(session, "ace", value = init)
  })

  observeEvent(input$test, {
    updateAceEditor(session, "ace", value = "Second text")
  })

})

shinyApp(ui = ui, server = server)

标签: rshiny

解决方案


这是您的答案的略微修改版本。我正在使用复选框输入的布尔结果来有条件地更新 Ace 编辑器。

init <- "first text"

ui <- shinyUI(
  pageWithSidebar(
    headerPanel(""),
    sidebarPanel(
      actionButton("reset", "Reset"),
      checkboxInput("test", "Test", FALSE)
    ),
    mainPanel(
      aceEditor(
        outputId = "ace",
        value = init
      )
    )
  )
)

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

  observe({
    cat(input$ace, "\n")
     print(input$test)
  })

  observe({
    if(input$test){
      updateAceEditor(session, "ace", value = "Second text")
      } else {
      updateAceEditor(session, "ace", value = init)
    }})

  observeEvent(input$reset, {
    updateAceEditor(session, "ace", value = init)
   })

  })

shinyApp(ui = ui, server = server)

推荐阅读