2016-07-20 3 views
-3

目標は光沢のあるモジュールui1.Rが何かがタイプされたときだけサブミットボタンをアクティブにすることですlsuId。現在のコードはエラーを取得しませんが、それは決してtoggleStateを呼び出すようです。ボタンを条件付きで表示するための光沢のあるモジュールを作成するには?

ui.R

library(shiny) 
library(shinyjs) 
htmlOutput("page") 

server.R

rm(list = ls()) 
library(shiny) 
library(dplyr) 
library(shinyjs) 
Logged <- FALSE 

shinyServer(function(input, output) { 

    observeEvent(input$"ui1Output-confirm", { 
    Logged <<- T 
    }) 

    observe({ 
input$"ui1Output-confirm" 
    if (Logged == FALSE) { 
     output$page <- renderUI({ 
     ui1Output('ui1Output') 
     }) 
     output$lsuId <- renderText({ input$lsuId }) 
    } 
    if (Logged == TRUE) 
    { 
     output$page <- renderUI({ ui2 }) 
    } 
    }) 
    callModule(ui1,'ui1') 
}) 

ui1.R

library(shinyjs) 

ui1Output <- function(id, label = "ui1") { 
    ns <- NS(id) 
    shinyUI(fluidPage(
    useShinyjs(), 
    titlePanel("Form"), 
    div(textInput(ns("lsuId"), "This has to be filled", ""), 
     actionButton(ns("confirm"), "Submit", class = "btn-primary") 
    ) 
)) 
} 

ui1 <- function(input, output, session) { 
    shinyjs::toggleState(id = "confirm", condition = F) 
    observeEvent(input$lsuId!="", { 
    shinyjs::toggleState(id = "confirm", condition = T) 
    }) 
} 

ui2.R

ui2<- shinyUI(fluidPage(
div("well done!") 
)) 

global.R

source('ui1.R') #login page 
source('ui2.R') 

答えて

0
observe({ 
    if (is.null(input$lsuId) || input$lsuId == "") { 
    shinyjs::disable("submit") 
    } else { 
    shinyjs::enable("submit") 
    } 
}) 
+0

あなたはそれを自分でテストしましたか? – Dambo

1

は、ここで私はこの1つに近づくだろう方法は次のとおりです。

ui.R

library(shiny) 

shinyUI(
    fluidPage(

    fluidRow(column(width = 12, 
        align = 'center', 
        h1('Conditional Submit Button'))), 

    fluidRow(column(width = 12, 
        align = 'center', 
        textInput(inputId = 'text.field', 
           label = 'What is your greatest fear?', 
           value = ''), 
        uiOutput('submit.button'))) 
) 
) 

server.R

library(shiny) 

shinyServer(
    function(input, output) { 

    output$submit.button <- 
     renderUI(expr = if (nchar(input$text.field)) { 
     submitButton() 
     } else { 
     NULL 
     }) 

    } 
) 

このアプローチは、私はポジティブ(少数の依存関係)だと思うshinyjsを、使用していませんが、あなたはに記載されていないshinyjsでそれをやってに興味を持っているいくつかの理由があるかどうかはわかりませんあなたの質問。

ここで、ui.RはtextInputというinputIdの要素と'text.field'という単純な要素を持ち、別のUI要素が'submit.button'というserver.Rにレンダリングされると約束しています。 server.R、output$submit.button

input$text.fieldの文字数が0である場合NULLに設定され、そうでなければsubmitButton()に設定されています。

+0

あなたのソリューションは、ボタンの有効/無効の効果を維持しますか?私はちょうど2つの異なった様式でボタンをそこに保つことを試みていた。 – Dambo