发亮:如果取消确认,则在radioGroupButtons上还原选择

问题描述 投票:0回答:1

我正在使用radioGroupButtons构建一个闪亮的应用程序。在这组按钮中有一些选择。默认情况下,将选择一个选项,但是当选择其他选项时,将弹出确认。如果确认,我会执行某些操作,但是如果在警报中单击cancel,则我希望选择返回到单击radioGroupButtons之前的状态。

在我的代码中,只有在至少单击一次“确认”之后,选择恢复才会发生,并且可以正常工作。第二个问题是,当它工作正常时,它始终会触发两次警报框。有人知道怎么了吗?

library(shiny)
library(shinyWidgets)

shinyApp(
    ui = fluidPage(
        tagList(
            radioGroupButtons(
                inputId = "group_btn", label = "Choose source:", 
                selected = "upload",
                choiceNames = c("Upload", "Example"), 
                choiceValues = c("upload", "eg"),
                justified = TRUE, status = "primary",
                checkIcon = list(yes = icon("ok", lib = "glyphicon"), no = icon(""))
            ),
            uiOutput("choice")
        )
    ),
    function(input, output, session) {
        selected_old <- reactiveVal(FALSE)
        observeEvent(input$group_btn, ignoreInit = TRUE, {
            confirmSweetAlert(
                session, inputId = "sweet_change_confirm", 
                title = "change Source?"
                )
            output$choice <- renderUI(p(print(input$group_btn)))
        })
        observeEvent(input$sweet_change_confirm, ignoreNULL = TRUE, {
            if (isTRUE(input$sweet_change_confirm)){
                selected_old(input$group_btn)
            } else {
                updateRadioGroupButtons(session, "group_btn", selected = selected_old(),
                                        checkIcon = list(yes = icon("ok", lib = "glyphicon"), no = icon(""))
                                        )
            }
        })
    }
)

我猜我更新第二个observeEvent时,由于选择已更改,因此再次触发了第一个observeEvent。如果是这种情况,我该如何避免?

r shiny sweetalert
1个回答
0
投票

似乎使用updateRadioGroupButtons会激活observeEventinput$group_btn。您可以在取消对话框时将另一个reactiveVal创建为“标志”,以便仅显示一次。

此外,我似乎将reactiveVal的默认selected_old更改为似乎要“上传”作为默认单选按钮。

library(shiny)
library(shinyWidgets)

shinyApp(
  ui = fluidPage(
    tagList(
      radioGroupButtons(
        inputId = "group_btn", label = "Choose source:", 
        selected = "upload",
        choiceNames = c("Upload", "Example"), 
        choiceValues = c("upload", "eg"),
        justified = TRUE, status = "primary",
        checkIcon = list(yes = icon("ok", lib = "glyphicon"), no = icon(""))
      ),
      uiOutput("choice")
    )
  ),
  function(input, output, session) {
    selected_old <- reactiveVal("upload")
    selected_flag <- reactiveVal(TRUE)

    observeEvent(input$group_btn, ignoreInit = TRUE, {
      if (selected_flag() == TRUE) {
        confirmSweetAlert(
          session, inputId = "sweet_change_confirm", 
          title = "change Source?"
        )
      } else {
        selected_flag(TRUE)
      }
    })

    output$choice <- renderUI(p(print(input$group_btn)))

    observeEvent(input$sweet_change_confirm, ignoreNULL = TRUE, {
      if (isTRUE(input$sweet_change_confirm)){
        selected_old(input$group_btn)
      } else {
        updateRadioGroupButtons(session, "group_btn", selected = selected_old(),
                                checkIcon = list(yes = icon("ok", lib = "glyphicon"), no = icon(""))
        )
        selected_flag(FALSE)
      }
    })
  }
)
© www.soinside.com 2019 - 2024. All rights reserved.