Приложение ниже имеет две кнопки: Add
и Reset All
.При нажатии Add
вставляется объект пользовательского интерфейса, который содержит:
- Два входа,
Month
и Year
. - Кнопка удаления
Remove
, которая удаляет объект приclicked.
Нажатие Reset All
сбрасывает все вставленные входные данные до их исходных значений.
Вот снимок экрана приложения после трехкратного нажатия на Add
:
Приложение выглядит следующим образом:
library(shiny)
library(shinyjs)
# UI
ui <- fluidPage(
useShinyjs(),
tags$head(tags$style(HTML('.shiny-split-layout > div { overflow: visible; }'))),
tagList(
span(
actionButton('add', 'Add'),
actionButton('reset', 'Reset All')
),
fluidRow(div(id = 'placeholder'))
)
)
# SERVER
server <- function(input, output, session) {
rv = reactiveValues(ctn = 0)
observeEvent(input$add, {
rv$ctn = rv$ctn + 1
Id = function(id) paste0(id, rv$ctn)
insertUI(
selector = '#placeholder',
ui = div(
id = Id('inputGroup'),
splitLayout(
cellWidths = '10%',
h4(Id('Month ')),
selectInput(Id('month'), 'Month:', month.name),
selectInput(Id('year'), 'Year:', 1510:1550),
actionButton(Id('remove'), 'Remove'))
)
)
remove_id = Id('remove')
remove_group = Id('inputGroup')
observeEvent(input[[remove_id]], {
removeUI(selector = paste0('#', remove_group))
})
})
observeEvent(input$reset, {
reset('placeholder')
})
}
# Run app
shinyApp(ui, server)
Кнопка Reset All
, кажется, работает по большей части, но не работает в следующемcase:
- Нажмите
Add
. - Внесите изменения во входные данные для месяца 1 и нажмите
Reset All
- работает здесь, входные данные для 1-го месяца сбрасываются до их начальных значений. - Снова нажмите
Add
. - Измените
Year
для Месяца 2 и нажмите Reset All
- здесь не работает, ввод Year
для Месяца 2 - не сброс к своему начальному значению (однако , повторное нажатие Reset All
снова сбрасывает значение, что сбивает с толку ).
Я не уверен, что сиспользование этого поведения или как его исправить, чтобы любая помощь была бы высоко оценена.