Использование InsertUI и UpdateSelectizeInput - PullRequest
0 голосов
/ 19 марта 2020

Я пытаюсь использовать методы InsertUI и updateSelectizeInput в функции сервера как часть моего приложения, главным образом из-за того, что мой список вариантов настолько велик.

library(shiny)

baby_names <- babynames::babynames %>% 
  distinct(name) %>%
  .[["name"]] %>% 
  sort()

ui <- fluidPage(
  tags$div(id = 'placeholder')
)

server <- function(input, output, session) {
  id = "babies"
  insertUI(selector = '#placeholder',
           ui = tags$div(list(
             selectizeInput("babynames", label = "Baby Names!", multiple = TRUE, choices = NULL, width = '400px',
                            options = list(placeholder = 'Type a baby name.'))
           ), 
           immediate = TRUE, 
           id = id))

    updateSelectizeInput(
      session, inputId = "babynames",
      choices = baby_names,
      server = TRUE)

}

shinyApp(ui, server)

Я не добиваюсь большого успеха из этого, поскольку selectizeInput отображается, но параметры раскрывающегося списка не отображаются. Как мне решить эту проблему? Спасибо!

1 Ответ

0 голосов
/ 19 марта 2020

Это объясняется в документации insertUI:

Эта функция позволяет динамически добавлять произвольно большой объект пользовательского интерфейса в ваше приложение, когда вы захотите, столько раз, сколько захотите. В отличие от renderUI (), пользовательский интерфейс, сгенерированный с помощью insertUI, нельзя обновить целиком: после создания он остается там. Каждый новый вызов insertUI создает больше объектов пользовательского интерфейса, в дополнение к уже существующим (все независимо друг от друга). Чтобы обновить часть пользовательского интерфейса (например, объект ввода), вы должны использовать соответствующую функцию рендеринга или настраиваемую реактивную функцию

(я добавил жирный шрифт)

Поэтому , вы должны использовать renderUI вместо.

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