2017-09-05 3 views
0

J'essaie d'obtenir des entrées d'un module sur le serveur de l'application.Shiny: obtenir une entrée d'un module

ici est un exemple de ce que je veux, le app.R:

library(shiny) 
source("test.R") 
ui <- fluidPage(
    tabPanel("tt", testUI("t")) 
) 

server <- function(input, output) { 
    ret <- callModule(test, "testm") 
    print(ret) 
} 

shinyApp(ui = ui, server = server) 

Un module de test:

testUI <- function(id) { 
    ns <- NS(id) 
    tabPanel(NULL, 
     textInput(ns("textInput1"), label = h5(""), value = "") 
)} 

    test <- function(input, output, session, data) { 
    reactive({input$textInput1}) 
    } 

Je voudrais imprimer le contenu de textInput1 de la fonction de serveur d'application .R et de l'observer.

Répondre

0

Deux problèmes avec votre code: 1) Dans l'interface utilisateur, vous appelez l'instance de module "t", dans le serveur "testm". Ceux-ci doivent être identiques. 2) Le module renvoie un réactif; ceci doit être évalué dans un contexte réactif: reactive, observe, ou render.

library(shiny) 
source("test.R") 
ui <- fluidPage(
    tabPanel("tt", testUI("testm")) 
) 

server <- function(input, output) { 
    ret <- callModule(test, "testm") 
    observe(print(ret())) 
} 

shinyApp(ui = ui, server = server) 
+0

Tanks pour votre réponse, maintenant ça marche! – Grundoc

0

La solution ci-dessus résout le problème de l'exemple fourni.

Cependant, je ne ne résoud pas pour mon application:

Je mon application je le app.R, un module1.R et un module2.R l'module2 est appel par le module1 qui est lui-même appeler par app.R. Je veux imprimer la valeur de 'textInput1' de la fonction module1.

app.R:

library(shiny) 
source("module1.R") 
ui <- fluidPage(
    tabPanel("Module 1", module1UI("module1")) 
) 

server <- function(input, output) { 
    callModule(module1, "module1") 
} 

shinyApp(ui = ui, server = server) 

module1.R:

source("module2.R") 

module1UI <- function(id) { 
    ns <- NS(id) 
    tabPanel(NULL, 
    tabPanel("Module 2", module2UI("module2")) 
)} 

module1 <- function(input, output, session, data) { 
    reactive({input$textInput1}) 
    ret <- callModule(module2, "module2") 
    observe(print(ret())) 
} 

module2.R:

module2UI <- function(id) { 
    ns <- NS(id) 
    tabPanel(NULL, 
    textInput(ns("textInput1"), label = h5(""), value = "") 
)} 

module2 <- function(input, output, session, data) { 
    reactive({input$textInput1}) 
}