如何避免运行动态添加输入的初始observeEvent

时间:2017-12-18 09:32:27

标签: r shiny

当动态输入元素添加到UI时,它将触发其已存在的observeEvent。特别是,请参阅下面的示例,其中textInput是在服务器端函数的第一次加载时动态添加的。然后当它呈现时将触发observeEvent。

有没有一种方法可以在添加输入元素时一般性地避免这种触发,特别是,我想测试输入1并以类似的方式测试输入2两次,即不是在启动时。 / p>

UI.R文件

library(shiny)

# Define UI for application that draws a histogram
shinyUI(fluidPage(

 fluidRow(
   uiOutput("my_output"),
   textInput(inputId = "test2", label = "test2", value = "start value"))

))

server.R文件

library(shiny)

first.load <- TRUE
shinyServer(function(input, output) {

  if(first.load){
    output$my_output <- renderUI({
      textInput(inputId = "test", label = "test", value = NULL)
    })
  }

  observeEvent(input$test2,{
    browser()
  }, ignoreInit = T)

  observeEvent(input$test, {
    browser()
  }, ignoreInit = T)
})

1 个答案:

答案 0 :(得分:0)

obServeEvent正在对input$test的存在做出反应。因此,当使用value = ""初始化observeEvent时,""将会触发,因为observeEvent仍然是非空值。作为快速修复,您可以将input$test包含在逻辑中,以便仅在""不等于observeEvent(input$test, { if (!input$test == ""){ browser() } }, ignoreInit = T) }) 时运行:

$('#iframe').on('load', function() {
    alert('frame has (re)loaded ');
});