2016-07-29 2 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がレンダリングされることを期待するだろうが、condif()に受信されなかったかのように私は、代わりに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

さて、あなたが取っているアプローチには多くの問題があります。基本的には、最初のモジュールを表示し、ボタンを押して2番目のモジュールに切り替える必要があります。 – Carl

+1

起動時に 'htmlOutput'をレンダリングしてサーバの関数を見ていますが、これはまだ存在しないクライアントからのオブジェクトである' cond() 'に基づいたif then文を持っていますそれは間違いです。 'renderUI'の場合は本質的にパラドックスです – Carl

関連する問題