Как отобразить реактивный пользовательский интерфейс для расширенных настроек в modalDialog с помощью Shiny using moduals - PullRequest
0 голосов
/ 29 мая 2020

Я разрабатываю приложение, которое будет иметь несколько вкладок, на каждой из которых будут c функции пользовательского интерфейса сбоку, но скрыть различные расширенные параметры пользовательского интерфейса во всплывающей модальной кнопке. Некоторые из этих параметров зависят от набора данных, например, выбирая, какие строки использовать.

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

Я думаю, что modalUI1 получает правильное пространство имен, но когда я вызываю uiOutput для реактивного элемента пользовательского интерфейса, созданного settingsServer1, он не отображается.

Ближайший пост слабины, который я нашел, сделал нечто подобное, но модальные у них были stati c UI. Здесь


# Basic View Functions ----------------------------------------------------
# These modules setup the basic view for each analysis

simpleui <- function(id){
  ns <- NS(id)
  selectData <- selectInput(ns("d"), "Dataset:",
                    c("iris",
                      "mtcars",
                      "iris3"))
  outputRows <- verbatimTextOutput(ns("df"))
  settingsButton<-
    actionButton(
      ns("settings"),
      "Settings")
  tabPanel(id,
  tagList(
    p(),
    selectData,
    p(),
    outputRows,
    p(),
    settingsButton
  )
  )

}
view1 <- function(input, output, session) {
  reactiveDf <-  reactive({
    switch(input$d,
           "iris" = iris,
           "mtcars" = mtcars,
           "iris3"= iris3)
  })
  output$df <-  renderText({nrow(reactiveDf())})
  callModule(settingsServer1, "settings", reactiveDf)
  observeEvent(input$settings, {
    showModal(settngsModal(session$ns))
  })

  settngsModal <- function(ns) {
    # ns <- NS(id) ### This is inner UI so passed namespace from outer
    modalDialog(
      modalUI1("settings"), ### Call innerModalUI.
      # withTags({  # UI elements for the modal go in here
      #   fluidRow(
      #     column(4, "Inputs","Sectionnormal",uiOutput("nrowSlide")),
      #     column(4, "Inputs","Sectionnormal",uiOutput(ns("nrowSlide")))
      #   )}
      ,
      title = "Settings",
      footer = modalButton("Dismiss"),
      size = "l",
      easyClose = FALSE,
      fade = TRUE)
  }
}


# Advanced settings hidden in modal ---------------------------------------
# These functions should hide the advanced UI settings in a Modal.
modalUI1 <- function(ns) {
  ### Several UI elements 1 of which chooses which first N Rows.
  ### The slider is reactive
  # reactiveSlider <-  uiOutput("nrowSlide")
  withTags({  # UI elements for the modal go in here
    fluidRow(
      # print(ns("nrowSlide")),
      # print(input),
      column(4, "---------",uiOutput(("nrowSlide")), "---------")
    )
  })
}
settingsServer1 <- function(input, output, session, reactiveDf){
  output$nrowSlide <- renderUI({
    sliderInput("obs", "Number of observations:",
                min = 1, max = nrow(reactiveDf()), value = 1)
  })
}



# Basic Setup -------------------------------------------------------------
ui <- shinyUI(navbarPage("My Application",
                         simpleui("v1"),
                         simpleui("v2")
))


server <- function(input, output, session) {
  callModule(view1, "v1")
  callModule(view1, "v2")
  ### Also look for event to create a modal.
  ### This modal will have reactive items.



}

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