闪亮:如果取消确认,则恢复 radioGroupButtons 上的选择
Shiny: revert choice on radioGroupButtons if confirmation is cancelled
我正在使用 radioGroupButtons
构建一个闪亮的应用程序。这组按钮中有几个选择。 By default one of the choices is selected, but when a different option is selected, a confirmation will pop out.如果确认,我会做一些事情,但是如果在警报中单击 cancel
,我希望选择返回到单击 radioGroupButtons
之前的状态。
在我的代码中,至少单击一次 "confirm" 才会发生选择还原,并且它会正常工作。第二个问题是当它工作正常时,它总是触发 2 次警报框。有人知道怎么回事吗?
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
会再次触发,因为选择已更改。如果是这种情况,我该如何避免?
看来使用 updateRadioGroupButtons
会为您的 input$group_btn
激活您的 observeEvent
。当您取消对话框时,您可以创建另一个 reactiveVal
到 "flag",这样它只出现一次。
此外,我将默认的 reactiveVal
更改为 selected_old
,因为您似乎希望 "upload" 作为默认的单选按钮。
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)
}
})
}
)
我正在使用 radioGroupButtons
构建一个闪亮的应用程序。这组按钮中有几个选择。 By default one of the choices is selected, but when a different option is selected, a confirmation will pop out.如果确认,我会做一些事情,但是如果在警报中单击 cancel
,我希望选择返回到单击 radioGroupButtons
之前的状态。
在我的代码中,至少单击一次 "confirm" 才会发生选择还原,并且它会正常工作。第二个问题是当它工作正常时,它总是触发 2 次警报框。有人知道怎么回事吗?
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
会再次触发,因为选择已更改。如果是这种情况,我该如何避免?
看来使用 updateRadioGroupButtons
会为您的 input$group_btn
激活您的 observeEvent
。当您取消对话框时,您可以创建另一个 reactiveVal
到 "flag",这样它只出现一次。
此外,我将默认的 reactiveVal
更改为 selected_old
,因为您似乎希望 "upload" 作为默认的单选按钮。
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)
}
})
}
)