Shiny: updateSelectizeInput зависит от другого updateSelectInput / ConditionalPanel - PullRequest
0 голосов
/ 28 февраля 2019

Я создал приложение Shiny, которое отображает информацию о государственных школах и школах.Начальная боковая панель просто предлагает пользователю выбирать из полигонов (школьные округа, округа и почтовые индексы) или точек (школы, колледжи, предприятия).После выбора «Школьные округа» на боковой панели отображается SelectInput со списком школьных округов.Как только район выбран, ДРУГАЯ условная панель показывает SelectInput со списком кампусов.Ниже приведен код для двух условных панелей.Обратите внимание, что «выбор» для панели «лагерь» пуст.

    conditionalPanel(condition = "output.districts",
                     selectizeInput(inputId = "schdist", label = "Choose a District:", choices = district_options, 
                                    multiple = FALSE, options = list(placeholder = 'Select one', 
                                                                     onInitialize = I('function() { this.setValue(""); }')))),

    conditionalPanel(condition= "output.districts", 
                     conditionalPanel(condition = "input.schdist != ''",
                     selectizeInput(inputId = "camp", label = "Campuses:",
                                    choices = "",
                                    multiple = F,
                                    options = list(placeholder = 'Select one',
                                                   onInitialize = I('function() { this.setValue(""); }'))))        ),

Вот реактивная переменная и наблюдаемое событие, которое обновляет выбор «лагеря»:

  school_choices <- reactive({
    dist <- district_data[district_data@data$NAME == input$schdist, ]
    choices <- campus_data[(campus_data$DISTNAME %in% dist@data$NAME), ]
    choices <- choices$CAMPNAME
    return(sort(choices))
  })

  observe({
    updateSelectInput(session, "camp", choices = school_choices())})

Этот код работает отлично.НО у меня также есть события кликов в моей карте Leaflet, которые обновляют различные SelectInputs (которые затем запускают другие функции приложения для отображения и т. Д.) В настоящее время в моем приложении с самого начала приложения пользователь может выбрать «кампусы ISD» для отображенияна карте листовки.Когда пользователь нажимает на один из этих маркеров, я хочу обновить ввод «schdist» И ввод «camp».Теперь у меня есть код, который обновляет «schdist» и показывает правильный выбор для ввода «camp», но он не будет обновлять ввод «camp», как выбранный = click $ id.Вот как это написано в настоящее время:

  observeEvent(input$baseMap_marker_click, {
    click <- input$baseMap_marker_click      
    if(click$id %in% campus_data$CAMPNAME) {
      df = campus_data[campus_data$CAMPNAME == click$id,]
      updateSelectizeInput(session, "polygons", selected="Independent School Districts")
      updateSelectizeInput(session, "schdist", selected= df$DISTNAME)
      updateSelectizeInput(session, "camp", selected=click$id)
}
})

Я также пробовал это:

if(click$id %in% campus_data$CAMPNAME) {
      df = campus_data[campus_data$CAMPNAME == click$id,]
      updateSelectizeInput(session, "polygons", selected="Independent School Districts")
      updateSelectizeInput(session, "schdist", selected= df$DISTNAME)
        if(is.null(input$camp)){
          updateSelectizeInput(session, "camp", selected=click$id)
        }

Но он ведет себя так же.

Так можно ли мне обновитьSelectInput, который реагирует на другое обновлениеSelectInput?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...