Я создаю блестящее приложение с radioGroupButtons
. В этой группе кнопок есть несколько вариантов. По умолчанию выбран один из вариантов, но при выборе другого варианта появится подтверждение. Если это подтверждается, я что-то делаю, но если в предупреждении нажата кнопка cancel
, я хочу, чтобы выделение вернулось в состояние go до нажатия кнопки radioGroupButtons
.
В моем коде реверсия выбора не произойдет, пока не будет нажата хотя бы однажды кнопка «Подтвердить», и она будет работать нормально. Вторая проблема - когда он работает нормально, он всегда срабатывает 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
запускается снова, потому что выбор был изменен. Если это так, как я могу избежать?