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.R
에 cond
의 값을 전달하는 방법
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()
의 오래된 대안일까요?
무엇이 문제인지 명확히하기 위해 앱의 나머지 부분을 추가했습니다. 작동 안함. – Dambo
알겠습니다. 접근 방법에 많은 문제가 있습니다. 본질적으로 당신이 원하는 것은 첫 번째 모듈을 표시하고 두 번째 모듈로 전환하기 위해 단추를 누를 때입니다. – Carl
그래서 시작시'htmlOutput'을 렌더링하여 서버의 함수를 찾도록 시도합니다. 그러면 클라이언트의 객체 인'cond()'에 기반한 if then 문이 있습니다. 오류. 'renderUI'의 if then 본질적으로 역설입니다. – Carl