在模块中使用闪亮的renderUI

时间:2017-10-23 21:07:37

标签: r module shiny

这是我在stackoverflow的第一个问题。模块和renderUI在闪亮(1.0.5)中有问题。

当我在

中使用renderUI时
#### Main Part

ui <- bootstrapPage(
  uiOutput("DynamicContent")
)

server <- function(input, output,session) {

  S_A <- selectInput("S_A_Input"  ,"Change Me for print message",choices=1:3 )

  output$DynamicContent <- renderUI({
    tagList(S_A) 
  })

  observe({
    print(input$S_A_Input) 
  })

}

shinyApp(ui = ui, server = server)

然后更改selectInput将导致更改输入$ S_A_Input,因此将进行打印。没关系。

另一方面,如果我使用模块,输入$ S_A_Input似乎不起作用:

### Module Part

Module_YYY_Server <- function(input, output, session){ 

  S_A <- selectInput("S_A_Input"  ,"Change Me for print message",choices=1:3 )

  output$DynamicContent <- renderUI({
    tagList(S_A) 
  })

  observe({
    print(input$S_A_Input) 
  })


}


Module_YYY_Ui <- function(id){

  ns <- NS(id) # Creates Namespace

  tagList(
    uiOutput("DynamicContent" %>% ns)
  )

}

然后调用模块。

#### Main Part

ui <- bootstrapPage(
  Module_YYY_Ui("YYY")  
)

server <- function(input, output,session) {
  callModule(Module_YYY_Server,"YYY")
}

shinyApp(ui = ui, server = server)

我还没有找到解决这种问题的方法。

2 个答案:

答案 0 :(得分:2)

虽然我确信您的示例已经过简化,但如果您的input$S_A_Input没有根据您的操作进行更改,例如您的示例中的情况,我建议不要使用renderUI。无论如何,输入不打印的原因是因为您没有将其作为输出生成。

Module_YYY_Server <- function(input, output, session){

  output$DynamicContent <- renderUI({
    ns <- session$ns
    tagList(
      selectInput("S_A_Input" %>% ns, "Change Me for print message",choices=1:3 )
    ) 
  })

  output$text <- renderText({input$S_A_Input})



}


Module_YYY_Ui <- function(id){

  ns <- NS(id) # Creates Namespace

  tagList(
    uiOutput("DynamicContent" %>% ns),
    textOutput("text" %>% ns)
  )

}

答案 1 :(得分:2)

迟到聚会,但这是使用

解决您的问题的另一种选择
  

session $ ns(“ id”)

这是它的样子:

Module_YYY_Server <- function(input, output, session){

  output$DynamicContent <- renderUI({
    selectInput(session$ns("S_A_Input"), "Change Me for print message", choices = 1:3)
    })

  output$text <- renderText({
    req(input$S_A_Input)
    input$S_A_Input})
}


Module_YYY_Ui <- function(id){

  ns <- NS(id) # Creates Namespace

  tagList(
    uiOutput(ns("DynamicContent")),
    textOutput(ns("text"))
  )
}


ui <- bootstrapPage(
  Module_YYY_Ui("YYY")
)

server <- function(input, output,session) {
  callModule(Module_YYY_Server,"YYY")
}

shinyApp(ui = ui, server = server)

这是基于示例here