1

私の ui.RI には、uiOutput と、クリックで自由に selectInput を追加できるボタンがあります。これらの selectInput の可能な選択肢は同じであるため、2 つの 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"))
      )
    )
  )
)

server.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 は選択肢のリストを更新しません。

4

0 に答える 0