R Shiny:有没有办法检查是否使用shinyjs包禁用了按钮?

时间:2017-03-18 03:00:25

标签: r shiny shinyjs

有没有办法检查是否使用shinyjs R包禁用了下载按钮?我想使用shinyjs或类似的东西,因为它们的语法非常简单。这是我的包裹:

server.R:

library(shiny)
library(shinyjs)
library(shinyBS)

shinyServer(function(input, output) {

  observe({

    shinyjs::disable("download1")

    if(shinyjs::is.disabled("download1")){ ## This is what I am trying to do
      # Do something
    }

  })

})

ui.R

shinyUI(fluidPage(

    downloadButton("download1")

))

1 个答案:

答案 0 :(得分:0)

不直接(好吧,不容易*)。

按钮只能在您决定禁用它们时禁用,因此您可以使用某种反应变量来保存是否应该禁用该按钮,并且每当您禁用该按钮时,您也可以更改该值。变量。为了确保它们保持同步,每次要禁用按钮时,您都可以将变量设置为镜像,然后您可以使用shinyjs::toggleState(condition = variable),以便禁用状态将反映变量的内容。< / p>

用于说明我的意思的示例代码:

library(shiny)

ui <- fluidPage(
  shinyjs::useShinyjs(),
  numericInput("num", "When divisible by 3, disable the button", 1),
  actionButton("btn", "button")
)

server <- function(input, output, session) {
  values <- reactiveValues(disable = FALSE)
  observe({
    values$disable <- (input$num %% 3 == 0)
  })
  observe({
    shinyjs::toggleState("btn", condition = !values$disable)
  })
}

shinyApp(ui = ui, server = server)

在此应用中,只要您想要停用按钮,只需将values$disable设置为FALSE,然后启用按钮将其设置为TRUE。要在任何时间点检查按钮当前是打开还是关闭,您可以查看values$disable的值。

*我猜你想要一个更直接的方法来实时询问应用程序一个问题“嘿,有光泽,按钮X目前是否被禁用?”。你可以这样做,但它会涉及编写自定义的javascript代码来检查按钮状态,以及自定义代码来询问javascript那个问题并听取它的响应。这可以起作用并保证是正确的,但对于大多数情况来说这可能是过度的。