0

希望你保持安全。

我搜索了类似的问题,但没有成功。

我的代码有 5k 行,所以发布它是不行的。

我会尽量提供尽可能多的信息。

简而言之,我有一些pickerInputs 用作rhandsontable 对象的反应过滤器。

我有一个保存按钮,以便用户保存他们的输入。

我最初的策略有一个致命弱点,即使用过滤进行保存会覆盖 rhandsontable 中的所有数据。

因此,一个快速的解决方法是添加一个observeEvent,其中保存按钮(通过使用ShinyJS)仅在pickerInput 选择了所有选项时才启用。

到目前为止,一切都很好,但我注意到一个奇怪的行为:最初,如果我们在 pickerInput 中单击“取消全选”,则保存按钮被禁用,但通过单击“全选”(启用保存按钮)然后“取消全选”然后保存按钮未禁用。

下面是我的 observeEvent 代码。

以前有没有人出现过这种行为?

## having buttons disabled by default to account for null/empty statement
  shinyjs::disable("save_data_PCD_Metrics") 
  
  observeEvent(input$metricsTableEXCELPCDProject, {
    req(input$metricsTableEXCELPCDProject)
    print(length(input$metricsTableEXCELPCDProject))
    print(length(sort(unique(as.character(metricsTableEXCEL$Project)))))
    print(isTRUE(length(input$metricsTableEXCELPCDProject) == length(sort(unique(as.character(metricsTableEXCEL$Project))))))
    print(input$metricsTableEXCELPCDProject)
    
    ## having buttons disabled by default to account for null/empty statement
    shinyjs::disable("save_data_PCD_Metrics")
    
    ## toggle state of the button when condition of all projects selected 
    if(isTRUE(length(input$metricsTableEXCELPCDProject) == length(sort(unique(as.character(metricsTableEXCEL$Project)))))) {
      shinyjs::enable("save_data_PCD_Metrics")
    }
    
  })
  

最好的,

R

4

1 回答 1

2

要解决您的问题,您可以在单独的观察者中启用保存按钮,而不是在observeEvent. 尝试这个

library(shiny)
library(shinyjs)
library(shinyWidgets)

df1 <- data.frame(A=c(1:15),Y=c(16:30))

ui <- fluidPage(
  useShinyjs(),
  pickerInput("test",choices=list("A"=list(1,2,3,4,5),"B"=list(6,7,8,9,10), "C" = list(11,12,13,14,15)),
              options = list(`actions-box` = TRUE 
                             
                             ),
              multiple=TRUE),
  actionButton("savee", "Save"),
  textOutput("testOutput") 
)

server <- function(input, output) {
  
  shinyjs::disable("savee") 
  
  observeEvent(input$test, {
    req(input$test)
    print(length(input$test))
    #print(length(sort(unique(as.character(metricsTableEXCEL$Project)))))
    print(isTRUE(length(input$test) == length(sort(unique(as.character(df1$A))))))
    print(input$test)
    
    ## having buttons disabled by default to account for null/empty statement
    # shinyjs::disable("savee")
    
    ##  toggle state of the button when condition of all projects selected  
    ##  enabling within this observeEvent will not work
    # if(isTRUE(length(input$test) == length(sort(unique(as.character(df1$A)))))) {
    #   shinyjs::enable("savee")
    # }
    
  })
  
  saveme <- reactive({
    if(isTRUE(length(input$test) == length(sort(unique(as.character(df1$A)))))) saveme = 1 else saveme = 0
  })
   
  observe({
    if (saveme()) {shinyjs::enable("savee")  ## this works
    }else shinyjs::disable("savee")
    print(saveme())
  })
  
  output$testOutput <- renderText({paste(input$test)})
}

shinyApp(ui = ui, server = server)
于 2021-06-11T18:22:27.987 回答