Я создаю приложение с модулями, в которых пользователь может создавать столько пользовательского интерфейса, сколько он хочет. Каждый пользовательский интерфейс содержит одну таблицу, и я хотел бы предоставить пользователю возможность видеть код для каждой из этих таблиц отдельно, а не в виде уникального фрагмента. Поэтому я включил часть кода с expandChain
в мой модуль (module_server
).
Однако, expandChain
не обнаружит реактивный материал, который я вызываю, потому что имя этого материала меняется, так как он создан в модуле. Взгляните на приложение ниже:
library(dplyr)
library(shiny)
library(shinymeta)
library(WDI)
module_ui <- function(id){
ns <- NS(id)
tagList(
fluidRow(
actionButton(ns("show_table"), "Show table"),
actionButton(ns("show_code"), "Show code"),
tableOutput(ns("table"))
)
)
}
module_server <- function(input, output, session){
data <- metaReactive2({
req(input$show_table)
isolate(metaExpr({
mtcars
}))
})
output$table <- renderTable({
data()
})
observeEvent(input$show_code, {
showModal(modalDialog(
renderPrint({
expandChain(data())
})
))
})
}
ui <- fluidPage(
actionButton("launch", "Launch")
)
server <- function(input, output, session) {
count <- reactiveValues(value = 0)
observeEvent(input$launch, {
count$value <- count$value + 1
insertUI(selector = "#launch",
where = "afterEnd",
ui = module_ui(count$value))
callModule(module_server, count$value)
})
}
shinyApp(ui, server)
Когда я пытаюсь показать код для сгенерированной таблицы, у меня появляется ошибка:
Warning: Error in : <text>:2:2: unexpected input
1: `1_data` <- mtcars
2: 1_
^
133: <Anonymous>
Поскольку модуль переименовывает data()
добавив число, data()
не распознается expandChain
. Я попытался с:
expandChain(paste0(id, "_data()"))
без успеха (так как expandChain
не поддерживает символ).
Кто-нибудь знает, как это сделать?
Также спросили на RStudio Community