如何让其他元素按下Shiny中的按钮作出反应

时间:2016-05-10 08:41:35

标签: r shiny

我有闪亮的应用程序的简单示例。在这里,我正在测试其他元素对特定元素变化的反应。

ui.r

 library(shiny)
 shinyUI(fluidPage(

  titlePanel("SCORE CARD DEVELOPMENT PLATFORM"),
    navbarPage("ScoreDevApp",
         tabPanel("Settings",
                  fluidRow(column(2,
                                   actionButton("goButton_service", "Load    saved parameters",width=200)
                                  ,radioButtons("DB_switch"
                                              , "Select Data Source"
                                              ,c("Oracle"=1,"text file"=2)
                                  )
                  )             
                  )
         ),
         tabPanel("Download & Binning input data",
                  fluidRow(column(2,
                                  textInput("text","test")))),
         id="ScoreDevApp"
    )
  )
)

server.r

library(shiny)
library(shinyjs)


shinyServer(function(input, output, session) {

observeEvent(input$goButton_service, {
  updateRadioButtons(session
                   , "DB_switch"
                   , "Select Data Source"
                   ,c("Oracle"=1,"text file"=2)
                   , selected = 2
                   , inline = FALSE
  )
  if(input$DB_switch==2){
    updateTextInput(session,text,"test",value="testing")
   }

  })  
})

按下按钮' goButton_service'导致radiobutton' DB_switch'的更新 - >所选项目为2而不是1(默认情况下)。多数民众赞成完成。

然后我要检查radiobutton的值:如果它是2那么字符串"测试"应该已经传递给textInput' text'在tabpanel'下载&分箱输入数据'。但是没有执行。需要帮助。

2 个答案:

答案 0 :(得分:1)

尝试下面的版本(我删除了启用/禁用代码,它没有任何功能)。您的主要错误是text周围缺少引号。

library(shiny)
library(shinyjs)


shinyServer(function(input, output, session) {
  observe({
    if (input$DB_switch == "2") {
      updateTextInput(session, "text", value = "testing")
    }
  }
  )
  observeEvent(input$goButton_service, {
    updateRadioButtons(session
                       , "DB_switch"
                       , "Select Data Source"
                       ,c("Oracle"=1,"text file"=2)
                       , selected = 2
                       , inline = FALSE
    )
  })
})

答案 1 :(得分:0)

如果您更新textInput两次,如下例所示,它应该可以解决您的问题

服务器

shinyServer(function(input, output, session) {

  observeEvent(input$goButton_service, {
    updateRadioButtons(session, "goButton_service", selected = 2)
    updateTextInput(session, "text", "test", value = "testing")
  }) 

  observe({
    if (input$DB_switch == 2) 
      updateTextInput(session, "text", "test", value = "testing")
  })

})