2016-07-29 1 views
1

모듈간에 입력을 전달하는 방법에 대해이 post이 발견되었지만 모듈을 상위 응용 프로그램에 전달하는 방법을 모르겠습니다.모듈 입력을 상위 응용 프로그램에 전달하는 방법은 무엇입니까?

나는 모듈 ui1.R

ui1UI <- function(id, label = "ui1UI") { 
    ns <- NS(id) 
    shinyUI(fluidPage(
    textInput(ns('id'), 'ID'), 
    actionButton(ns("confirm"), "Submit", class='btn-primary') 

)) 
} 

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

    cond <- reactive({ input$confirm}) 

    observeEvent(length(input$id)!="", { 
    toggleState("confirm") 
    }) 

    return(cond) 

} 

을하고 난 server.R에서 cond에 액세스하려면 내가 server.Rcond의 값을 전달하는 방법

shinyServer(function(input, output, session) { cond <- callModule(ui1, "ui1") callModule(server, "ui1a", cond) output$page <- renderUI(expr= if(is.null(cond())) { ui1UI('ui1') } else { ui2UI('ui2') } ) }) 

?

응용 프로그램의 나머지 부분은 다음과 같습니다

ui.R

tagList(useShinyjs(), htmlOutput("page")) 

global.R

rm(list=ls()) 
source('ui1.R') 
source('ui2.R') 
library(shiny) 
library(shinyjs) 

ui2.R

ui2UI <- function(id, label = "ui2UI") { 
    ns <- NS(id) 
    shinyUI(fluidPage(
    textInput(ns('id'), 'Second Page') 

)) 
} 

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

} 

결국, 나는 ui1.R가 렌더링 기대하지만, if()에 수신되지 cond 것처럼 내가 대신 ui2.R 얻을.

ps : r-bloggers 게시물은 callModules()을 사용합니다. callModule()의 오래된 대안일까요?

답변

0

나는 당신의 문제가 무엇인지 정확하게 모르겠습니다. 당신은 올바른 생각을 가지고 있습니다. 다음은 작업 버튼의 값을 표시하는 모듈을 사용하는 예입니다 (원하는 것은 이상한 것임).

library(shiny) 
ui1UI <- function(id, label = "ui1UI") { 
    ns <- NS(id) 
    shinyUI(fluidPage(
    textInput(ns('id'), 'ID'), 
    actionButton(ns("confirm"), "Submit", class='btn-primary') 

)) 
} 

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

    cond <- reactive({ input$confirm}) 

    return(cond) 

} 

ui =fluidPage(
    ui1UI("test"), 
    uiOutput("example") 
) 

server=shinyServer(function(input, output, session) { 

    value <- callModule(ui1,"test") 

    output$example <- renderUI({ 
     HTML(value()) 
    }) 

}) 

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

무엇이 문제인지 명확히하기 위해 앱의 나머지 부분을 추가했습니다. 작동 안함. – Dambo

+0

알겠습니다. 접근 방법에 많은 문제가 있습니다. 본질적으로 당신이 원하는 것은 첫 번째 모듈을 표시하고 두 번째 모듈로 전환하기 위해 단추를 누를 때입니다. – Carl

+1

그래서 시작시'htmlOutput'을 렌더링하여 서버의 함수를 찾도록 시도합니다. 그러면 클라이언트의 객체 인'cond()'에 기반한 if then 문이 있습니다. 오류. 'renderUI'의 if then 본질적으로 역설입니다. – Carl

관련 문제