Когда я использую sparkljs :: togglestate, чтобы сравнить все входные переменные из пользовательского интерфейса с входными переменными modalDialog, это работает только в первый раз.Если я закрою модальное диалоговое окно и открою его снова, оно не будет работать!
Реактивное правило:
if they are equal: button is blocked
if they are different: the button is enabled
Obs: значения из модальных диалоговых переменных должны быть выбранными входными значениямив пользовательском интерфейсе.(Это очень общий пример, если у вас есть проверка базы данных, и вы просто хотите обновить ее, если что-то изменилось)
Я создал это простое приложение, чтобы представить проблему.Просто запустите его, нажмите кнопку один раз, наблюдайте ожидаемое поведение, закройте модальное диалоговое окно, щелкните второй раз и посмотрите, что оно больше не работает, но если вы измените какое-либо значение в модальном диалоговом окне и вернетесь к исходному входному значению, оно внезапно«вспоминает» снова работать.
library(shiny)
library(shinyjs)
shinyApp(
ui =
fluidPage(
useShinyjs(),
sidebarLayout(
sidebarPanel(
textInput("txt1","text"),
selectInput("select1","select",c("A","B","C")),
numericInput("n1","numeric",1),
dateInput("d1","date",value = Sys.Date()),
actionButton("go", "Go")),
mainPanel())
),
server =
function(input, output, session) {
observe({
shinyjs::toggleState("click", !(input$txt1 == input$txt2 &&
input$select1 == input$select2 &&
input$n1 == input$n2 &&
input$d1 == input$d2
) )
})
observeEvent(input$go,{
showModal(
modalDialog(
textInput("txt2", "text", input$txt1),
selectInput("select2", "select", c("A","B","C"), input$select1),
numericInput("n2", "numeric", input$n1 ),
dateInput("d2", "date", value = input$d1),
actionButton("click", "Click")
)
)
})
}
)
Почему такое неожиданное поведение?Есть ли обходной путь для этого?
Заранее спасибо!