在模块服务器功能中访问闪亮的模块 ID
Access shiny module id within the modules server function
我想访问传递到闪亮模块 UI 组件的 ID 和模块相应服务器组件内的 callModule
。我的意图是使用用户提供的 id 为弹出模式添加标题。
library(shiny)
fooModuleUI <- function(id) {
ns <- NS(id)
list(
actionButton(inputId = ns("show"), label = "Show")
)
}
fooModule <- function(input, output, session) {
# I want to be able to access the id of the module here so that I can use it
# to construct the title to the modal
observeEvent(input$show, {
showModal(
modalDialog(
title = paste0("Add ", "Module id here"), # Want module id here
footer =
div(
modalButton("Cancel"),
actionButton("insert", "Save")
)
)
)
})
}
ui <- shiny::fluidPage(
fooModuleUI("test")
)
server <- function(input, output, session) {
callModule(fooModule, "test")
}
shiny::shinyApp(ui, server)
这有点像使用 session$ns
(通常用于创建模块输出等)。使用它您可以创建示例 ID 并从中提取模块 ID。
fooModule <- function(input, output, session) {
x <- session$ns('tmp') # make an ID string
mod_id <- substr(x, 1, nchar(x)-4) # remove last 3 characters, ie "-tmp"
observeEvent(input$show, {
showModal(
modalDialog(
title = paste0("Add ", mod_id), # Want module id here
footer =
div(
modalButton("Cancel"),
actionButton("insert", "Save")
)
)
)
})
}
更简洁的方法是在调用 callModule
时将模块 ID 作为额外参数传递,如下所示:
fooModule <- function(input, output, session, mod_id) {
observeEvent(input$show, {
showModal(
modalDialog(
title = paste0("Add ", mod_id), # Want module id here
footer =
div(
modalButton("Cancel"),
actionButton("insert", "Save")
)
)
)
})
}
server <- function(input, output, session) {
callModule(fooModule, "test", mod_id='test')
}
我想访问传递到闪亮模块 UI 组件的 ID 和模块相应服务器组件内的 callModule
。我的意图是使用用户提供的 id 为弹出模式添加标题。
library(shiny)
fooModuleUI <- function(id) {
ns <- NS(id)
list(
actionButton(inputId = ns("show"), label = "Show")
)
}
fooModule <- function(input, output, session) {
# I want to be able to access the id of the module here so that I can use it
# to construct the title to the modal
observeEvent(input$show, {
showModal(
modalDialog(
title = paste0("Add ", "Module id here"), # Want module id here
footer =
div(
modalButton("Cancel"),
actionButton("insert", "Save")
)
)
)
})
}
ui <- shiny::fluidPage(
fooModuleUI("test")
)
server <- function(input, output, session) {
callModule(fooModule, "test")
}
shiny::shinyApp(ui, server)
这有点像使用 session$ns
(通常用于创建模块输出等)。使用它您可以创建示例 ID 并从中提取模块 ID。
fooModule <- function(input, output, session) {
x <- session$ns('tmp') # make an ID string
mod_id <- substr(x, 1, nchar(x)-4) # remove last 3 characters, ie "-tmp"
observeEvent(input$show, {
showModal(
modalDialog(
title = paste0("Add ", mod_id), # Want module id here
footer =
div(
modalButton("Cancel"),
actionButton("insert", "Save")
)
)
)
})
}
更简洁的方法是在调用 callModule
时将模块 ID 作为额外参数传递,如下所示:
fooModule <- function(input, output, session, mod_id) {
observeEvent(input$show, {
showModal(
modalDialog(
title = paste0("Add ", mod_id), # Want module id here
footer =
div(
modalButton("Cancel"),
actionButton("insert", "Save")
)
)
)
})
}
server <- function(input, output, session) {
callModule(fooModule, "test", mod_id='test')
}