У меня есть блестящее приложение, созданное через несколько вкладок.На первой вкладке у меня есть несколько selectInputs и флажки.
Эти объекты должны помочь в выборе внутри здания уровней и / или зон.Здание имеет несколько уровней, а каждый уровень - несколько зон.
Флажки показывают, хотите ли вы выбрать один уровень здания или нет, а selectInputs представляет конкретные зоны, которые вы хотите выбрать из этого уровня.То есть: каждый уровень имеет свой собственный флажок, и каждый флажок имеет свой собственный selectInput.
Эти входы связаны следующим образом: Когда вы нажимаете один флажок, выбираются все параметры соответствующего selectInput.
Проблема в том, что, когда я выбираю несколько зон одного selectInput с одного уровня (например, уровень 0) и после того, как я нажимаю один флажок другого уровня (уровень 1), выбранные параметры с уровня до (Уровень0) исчезают и больше не выбираются.Кажется, они связаны или как-то связаны.
Есть ли способ решить эту проблему?
Спасибо за вашу помощь!
Ниже приведена соответствующая часть пользовательского интерфейса приложения:
tabItem(tabName = "building",
fluidRow(
# checkbox for select all levels
div(class = "selectall", prettyCheckbox(inputId = "selectall", label = strong("All Building Information"),
status = "info", shape = "curve")
)
), br(),
fluidRow(
column(
fluidRow(
column(
fluidRow(
div(class = "selectlevel",
# checkbox for select level 0
prettyCheckbox(inputId = "selectlevel0", label = strong("Level 0"),
status = "info", animation = "smooth", shape = "curve", plain = T)
)
),
div(class = "sepselect",
fluidRow(
# select input level 0 zones
selectInput(inputId = "zone0", label = "Select Zone",
choices = c("zone0a","zone0b","zone0c") , multiple = TRUE)
)
),
width = 3),
column(
# image level 0
img(src = "level0.png", height = "220px", width = "80%", style="border:1px solid grey"),
width = 9)
),
width = 6),
column(
fluidRow(
column(
fluidRow(
div(class = "selectlevel",
# checkbox for select level 1
prettyCheckbox(inputId = "selectlevel1", label = strong("Level 1"),
status = "info", animation = "smooth", shape = "curve", plain = T)
)
),
div(class = "sepselect",
fluidRow(
# select input level 1 zones
selectInput(inputId = "zone1", label = "Select Zone",
choices = c("zone1a","zone1b","zone1c","zone1d","zone1e"), multiple = TRUE)
)
),
width = 3),
column(
# image level 1
img(src = "level1.png", height = "220px", width = "80%", style="border:1px solid grey"),
width = 9)
),
width = 6)
)
) # close tabitem maps
Ниже приведена соответствующая часть кода длясервер:
# select all areas in each level
observe({
# level 0
if(input$selectlevel0 == TRUE){
selected_choices <- c("zone0a","zone0b","zone0c")
} else {
selected_choices <- character(0)
}
updateSelectInput(session, "area0", selected = selected_choices)
# level 1
if(input$selectlevel1 == TRUE){
selected_choices <- c("zone1a","zone1b","zone1c","zone1d","zone1e")
} else {
selected_choices <- character(0)
}
updateSelectInput(session, "area1", selected = selected_choices)
})
# select all levels
observe({
if(input$selectall == FALSE){
updateCheckboxInput(session, "selectlevel0", value = F)
updateCheckboxInput(session, "selectlevel1", value = F)
} else{
updateCheckboxInput(session, "selectlevel0", value = T)
updateCheckboxInput(session, "selectlevel1", value = T)
}
})
Также я предоставлю вам изображение внешнего вида приложения: Частичный вид приложения