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がレンダリングされることを期待するだろうが、cond
はif()
に受信されなかったかのように私は、代わりにui2.Rを取得します。
ps:r-bloggers投稿はcallModules()
を使用しています。それはちょうどcallModule()
の古い代替ですか?
おかげで、私は何か明確にするアプリの残りの部分を追加しました:ここで(奇妙なことのビットがしたいことですが、何でも)アクションボタンの値を表示し、あなたのモジュールを使用した例です。働いていない。 – Dambo
さて、あなたが取っているアプローチには多くの問題があります。基本的には、最初のモジュールを表示し、ボタンを押して2番目のモジュールに切り替える必要があります。 – Carl
起動時に 'htmlOutput'をレンダリングしてサーバの関数を見ていますが、これはまだ存在しないクライアントからのオブジェクトである' cond() 'に基づいたif then文を持っていますそれは間違いです。 'renderUI'の場合は本質的にパラドックスです – Carl