У меня довольно сложный пользовательский интерфейс с длинными цепочками зависимых пользовательских входов.зависящая от обновления цепочка входов
Одна из возможностей, которую я хочу добавить, - это возможность хранить все входные значения в любой момент времени в виде строки и использовать эту строку для сброса всех входов в результате действия actionButton. Хранение строки в JSON прост, но восстановление зависимых входов оказалось сложным, и мне интересно, есть ли там хорошие идеи.
Ниже приведено небольшое приложение для примера. Вы можете видеть, что выбор переменных зависит от выбранной группы (group1 или group2).
После нажатия кнопки actionButton, я хочу установить group = group2 и variable = group2_variable2.
Но щелчок только точно устанавливает группу, а переменная устанавливается на первый (по умолчанию) выбор.
Я предполагаю, что мне нужно подождать, пока независимый вход не будет полностью сброшен, прежде чем обновлять любые зависимые входы, но существует ли систематический способ сделать это в пределах одного наблюдения()? Или есть другой предпочтительный способ сделать это?
library(shiny)
groups <- c('group1', 'group2')
variables <- list(
group1 = c('group1_var1', 'group1_var2'),
group2 = c('group2_var1', 'group2_var2'))
ui <- pageWithSidebar(
# Application title
headerPanel('Demo'),
# Sidebar with a slider input for number of bins
sidebarPanel(
selectInput(
inputId = 'group',
label = 'Group:',
choices = groups),
uiOutput('variable_selector'),
actionButton(
inputId = 'reset_parameters',
label = 'Reset Parameters')
),
# Show a plot of the generated distribution
mainPanel(
h4('Demo')
)
)
server <- shinyServer(function(input, output, session) {
output$variable_selector <- renderUI({
selectInput(
inputId = 'variable',
label = 'Variable:',
choices = variables[[input$group]])
})
observe({
if (input$reset_parameters > 0) {
updateSelectInput(
session,
inputId = 'group',
selected = 'group2')
updateSelectInput(
session,
inputId = 'variable',
selected = 'group2_var2')
}
})
})
shinyApp(ui = ui, server = server)
Спасибо, кажется, работает! У меня есть чувство, что я столкнусь с осложнениями с некоторыми входами, которые существуют только при определенных условиях (поэтому используется renderUI), но это решает более простой вопрос, который я задал. –