闪亮的观察者会响应未选中的所有复选框

时间:2015-10-09 22:44:19

标签: r shiny

在闪亮的小部件中取消选中最后一个复选框时是否会触发观察者?在这里,当用户选择其他一些复选框选项时,我会通过观察者检查一些复选框。但是,我发现当最后一个复选框未选中时,观察者不会触发。它适用于其他一切。

这是一个例子,其中输入'根据'子集'检查复选框。选项。我添加了一些打印输出用于调试,如果检查了子集框,然后所有这些都未经检查,则没有打印输出,这表明观察者没有工作。

library(shiny)
shinyApp(
    shinyUI(
        fluidPage(
            uiOutput('ui')
        )
    ),
    shinyServer(function(session, input, output) {
        ## Some sample data
        dat <- data.frame(foo=1:10, bar=factor(c('a','b')))

        ## The UI
        output$ui <- renderUI({
            inputPanel(
                checkboxGroupInput('input', 'Input:', choices=dat$foo),
                checkboxGroupInput('subset', 'Subset:', choices=levels(dat$bar))
            )
        })

        ## Observer for checking 'input' boxes
        observeEvent(input$subset, {
            ## Print output for debugging
            print(dat$foo[dat$bar %in% input$subset])
            updateCheckboxGroupInput(session, inputId='input',
                                     selected=paste(dat$foo[dat$bar %in% input$subset]))
        })
    })

)

我只想拥有所有的输入&#39;所有&#39;子集&#39;都会取消选中复选框。检查未经检查。这该怎么做?谢谢!

1 个答案:

答案 0 :(得分:14)

您想使用观察者的ignoreNull参数。这是一个简化的例子

library(shiny)
shinyApp(
  shinyUI(
    fluidPage(
      uiOutput('ui')
    )
  ),
  shinyServer(function(session, input, output) {

    output$ui <- renderUI({
      inputPanel(
        checkboxGroupInput('subset', 'Subset:', choices = c("a", "b"))
      )
    })

    observeEvent(input$subset, {
      print("hello: ")
      print(input$subset)
    }, ignoreNULL = FALSE)
  })

)