R Shiny - updateSelectInput и updateSelectizeInput на выбор не работает - PullRequest
0 голосов
/ 05 марта 2020

В моем ui.RI есть uiOutput и кнопка, которая позволяет мне добавлять selectInput по желанию одним кликом. Возможные варианты этих selectInput одинаковы, поэтому, когда у вас есть два selectInput, обновление одного влияет на выбор другого. У меня проблема в том, что я не могу обновить выбор на selectInput после обновления на selectInput. Вот код.

В Ui.R

div(id="inference_species_group_div",
  box(h5(strong(uiInferenceSpeciesGroup)), width = "100%",
    fluidRow(
      column(width = 6, id = "inference_species_group_inputs_col",
        uiOutput("inf_par_sp_group_output_1")
      )
    ),
    br(),
    fluidRow(
      column(width = 12, id = "inference_species_group_add_input_col",
             actionButton("inference_species_group_add_input_btn", uiInferenceSpeciesGroupAdd, icon = icon("plus"))
      )
    )
  )
)

на сервере. R

observeEvent(input$inference_species_group_add_input_btn, {
  addInfParSpGroupAdd()
})

addInfParSpGroupAdd <- function(){
  InfParSpGpInd <<- InfParSpGpInd + 1
  output[[paste0("inf_par_sp_group_output_", InfParSpGpInd)]] <- renderUI({
    list(
      fluidRow(
        column(width=8, 
               selectInput(paste0("inf_par_sp_group_select_", InfParSpGpInd), 
                  label=paste0(uiInferenceSpeciesGroupInputLabel, ""),
                  multiple=T, choices = InfParSpGpListSp, selected = NULL
               )
        ),
        column(width=1, id=paste0("inf_par_sp_group_rmv_col_", InfParSpGpInd),
               actionButton(paste0("inf_par_sp_group_rmv_btn_", InfParSpGpInd), "", icon = icon("times"),
                  onclick = paste0("Shiny.onInputChange('removeGroupSpecies', ", InfParSpGpInd, ")")
               )
        ),
        tags$style(type='text/css', paste0("#inf_par_sp_group_rmv_col_", InfParSpGpInd, " {padding-top:4%}"))
      ),
      uiOutput(paste0("inf_par_sp_group_output_", (InfParSpGpInd + 1)))
    )
  })
  observeEvent(input[[paste0("inf_par_sp_group_select_", InfParSpGpInd)]], {
    selectedInInput = input[[paste0("inf_par_sp_group_select_", InfParSpGpInd)]]
    InfParSpGpListSp <<- InfParSpGpListSp [! InfParSpGpListSp %in% selectedInInput]
    rebindGroupSpeciesInputs()
  })
}

observeEvent(input$removeGroupSpecies, {
  i = input$removeGroupSpecies
  selectedInInput = input[[paste0("inf_par_sp_group_select_", i)]]
  output[[paste0("inf_par_sp_group_output_", i)]] <- renderUI({
    uiOutput(paste0("inf_par_sp_group_output_", (i + 1)))
  })
  if (!is.null(selectedInInput) && length(selectedInInput) > 0){
    InfParSpGpListSp <<- c(InfParSpGpListSp, selectedInInput)
    rebindGroupSpeciesInputs()
  }
})

rebindGroupSpeciesInputs <- function(){
  for (i in 1:InfParSpGpInd){
    if (!is.null(input[[paste0("inf_par_sp_group_select_", i)]])){
      updateSelectInput(session, input[[paste0("inf_par_sp_group_select_", i)]], choices = InfParSpGpListSp)
    }
  }
}

В этой строке

updateSelectInput(session, input[[paste0("inf_par_sp_group_select_", i)]], choices = InfParSpGpListSp)

значение InfParSpGpListSp должно быть таким, каким оно должно быть, но selectInput / selectizeInput не обновляет список вариантов выбора.

...