仅获取已更改的InputID [英] Get only InputIDs that have changed

查看:8
本文介绍了仅获取已更改的InputID的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

是否可以仅选择/获取已更改的小部件的输入名称?假设我有一个闪亮的应用程序,并且我取消选中了一个复选框GroupInput。是否有可能以某种方式获取该小工具的inputId?

推荐答案

以下是使用Basic SHINY的解决方案:

library(shiny)

ui <- fluidPage(
  titlePanel("Old Faithful Geyser Data"),
  sidebarLayout(
    sidebarPanel(
      sliderInput("bins1",
                  "Number of bins 1:",
                  min = 1,
                  max = 50,
                  value = 30),
      sliderInput("bins2",
                  "Number of bins 2:",
                  min = 1,
                  max = 50,
                  value = 30),
      textOutput("printChangedInputs")
    ),
    mainPanel(
      plotOutput("distPlot1"),
      plotOutput("distPlot2")
    )
  )
)

server <- function(input, output) {

  output$distPlot1 <- renderPlot({
    x    <- faithful[, 2] 
    bins <- seq(min(x), max(x), length.out = input$bins1 + 1)
    hist(x, breaks = bins, col = 'darkgray', border = 'white')
  })

  output$distPlot2 <- renderPlot({
    x    <- faithful[, 2] 
    bins <- seq(min(x), max(x), length.out = input$bins2 + 1)
    hist(x, breaks = bins, col = 'darkgray', border = 'white')
  })

  previousInputStatus <- NULL

  changedInputs <- reactive({
    currentInputStatus <- unlist(reactiveValuesToList(input))
    if(is.null(previousInputStatus)){
      previousInputStatus <<- currentInputStatus
      changedInputs <- NULL
    } else {
      changedInputs <- names(previousInputStatus)[previousInputStatus != currentInputStatus]
      print(paste("Changed inputs:", changedInputs))
      previousInputStatus <<- currentInputStatus
    }
    return(changedInputs)
  })

  output$printChangedInputs <- renderText({paste("Changed inputs:", changedInputs())})

}

shinyApp(ui = ui, server = server)

编辑:另一种方法是侦听JavaScript事件shiny:inputchanged

library(shiny)

ui <- fluidPage(
  tags$head(
    tags$script(
      "$(document).on('shiny:inputchanged', function(event) {
      if (event.name != 'changed') {
        Shiny.setInputValue('changed', event.name);
      }
    });"
    )
  ),
  titlePanel("Old Faithful Geyser Data"),
  sidebarLayout(
    sidebarPanel(
      sliderInput("bins1",
                  "Number of bins 1:",
                  min = 1,
                  max = 50,
                  value = 30),
      sliderInput("bins2",
                  "Number of bins 2:",
                  min = 1,
                  max = 50,
                  value = 30),
      textOutput("changedInputs")
    ),
    mainPanel(
      plotOutput("distPlot1"),
      plotOutput("distPlot2")
    )
  )
)

server <- function(input, output) {

  output$distPlot1 <- renderPlot({
    x    <- faithful[, 2] 
    bins <- seq(min(x), max(x), length.out = input$bins1 + 1)
    hist(x, breaks = bins, col = 'darkgray', border = 'white')
  })

  output$distPlot2 <- renderPlot({
    x    <- faithful[, 2] 
    bins <- seq(min(x), max(x), length.out = input$bins2 + 1)
    hist(x, breaks = bins, col = 'darkgray', border = 'white')
  })

  output$changedInputs <- renderText({paste("Changed inputs:", input$changed)})

}

shinyApp(ui = ui, server = server)

有关详细信息,请参阅this

这篇关于仅获取已更改的InputID的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆