问题描述
我正在使用 modalDialog 弹出窗口来允许在 github api 中记录问题。但是,由于 actionButton("ok","Submit new issue")
在模块化服务器端代码中,我相信由于它没有命名空间,所以按钮不起作用。我在下面提供了一个测试代码,当按下按钮时它应该显示标题,但它没有做任何事情。
有什么办法可以解决吗?
library(shiny)
editTableuI <- function(id){
ns<-NS(id)
tagList(
actionButton(ns("add_issue"),"New Issue"),textoutput("text"))
}
editTable <-function(input,output,session){
observeEvent(input$add_issue,{
loginModal <- function() {
modalDialog(
title = "Create Issue",textInput("title","Title"),textAreaInput("body","Body",placeholder = "Leave a comment",width = '100%',height = '300px' ),selectInput("asignee",label= "Assignees",selected = NULL,choices = c("a","b","c","d"),multiple = T ),footer = tagList(
modalButton("Cancel"),actionButton("ok","Submit new issue")),fade = T,size = c("s")
)
}
showModal(loginModal())
})
observeEvent(input$ok,{
output$text <- renderText({ input$title })})
}
ui <- fluidPage(
editTableuI("tab2"))
server <- function(input,session) {
callModule(editTable,"tab2")}
shinyApp(ui,server)
解决方法
我现在明白你的意思了,当你使用模块并在模块内创建对象时,你需要为它们分配命名空间,例如session$ns("ok")
,然后您可以像这样访问它们:session$input$ok
,类似于您拥有的 title
输入,下面的代码应该适合您...
library(shiny)
editTableUI <- function(id){
ns <- NS(id)
tagList(
actionButton(ns("add_issue"),"New Issue"),textOutput(ns("text"))
)
}
editTable <-function(input,output,session){
observeEvent(input$add_issue,{
loginModal <- function() {
modalDialog(
title = "Create Issue",textInput(session$ns("title"),"Title"),textAreaInput("body","Body",placeholder = "Leave a comment",width = '100%',height = '300px' ),selectInput("asignee",label= "Assignees",selected = NULL,choices = c("a","b","c","d"),multiple = T ),footer = tagList(
modalButton("Cancel"),actionButton(session$ns("ok"),"Submit new issue")),fade = T,size = c("s")
)
}
showModal(loginModal())
})
observeEvent(session$input$ok,{
output$text <- renderText({
input$title
})
})
}
ui <- fluidPage(
editTableUI("tab2"))
server <- function(input,session) {
callModule(editTable,"tab2")
}
shinyApp(ui,server)