Я разрабатываю приложение, которое будет иметь несколько вкладок, на каждой из которых будут 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)