【问题标题】:how to make other elements to react the pressing the button in Shiny如何使其他元素对按下 Shiny 中的按钮做出反应
【发布时间】:2016-09-05 02:59:20
【问题描述】:

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

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”会导致单选按钮“DB_switch”的更新 -> 所选项目是 2 代替 1(默认情况下)。做得很好。

然后我要检查单选按钮的值:如果它是 2,那么字符串“testing”应该已经传递到选项卡面板“下载和分箱输入数据”上的 textInput 'text'。然而它没有被执行。需要帮助。

【问题讨论】:

    标签: r shiny


    【解决方案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
        )
      })
    })
    

    【讨论】:

    • 我试过你的版本,但是没有用。我已经尝试了在你的脚本中没有引号的选项“(if(input$DB_switch ==”2”)“。你有没有假设的结果(按下按钮字符串“testing”应该出现在textInput'text'中)?
    • 好吧,我发现了您脚本中的差异并已将其删除。要使您的脚本工作,您需要编写 'selected = "2" ',而不是 ' selected = 2'。改正后效果很好。
    【解决方案2】:

    如果您更新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")
      })
    
    })
    

    【讨论】:

    • 好吧,如果要更正元素 id 和标签,它似乎会生成必要的输出。但我需要按照以下步骤输出:按'goButton_service'->更改单选按钮->根据单选按钮的更新值将字符串传递给文本输入'文本'。您的建议是在按下按钮时传递字符串(看起来像)。
    猜你喜欢
    • 2013-05-04
    • 1970-01-01
    • 1970-01-01
    • 2018-02-02
    • 1970-01-01
    • 2012-10-22
    • 1970-01-01
    • 1970-01-01
    • 2019-12-30
    相关资源
    最近更新 更多