Отключить selectInput и меню, пока блеск занят - PullRequest
0 голосов
/ 08 октября 2018

Я бы хотел отключить пункты меню и выбрать «Ввод» во время загрузки моего приложения Shiny.Мне удалось отключить кнопки и textInput с помощью некоторого javacript (ср. Отключить элементы, когда Shiny занят ), но я не могу заставить его работать с selectInput и меню.Меня не интересуют альтернативные решения.

library(shiny)

js <- "$(document).on('shiny:busy', function() {
  var $inputs = $('button,input,select,ul');
  console.log($inputs);
  $inputs.prop('disabled', true);
});

$(document).on('shiny:idle', function() {
  var $inputs = $('button,input,select,ul');
  console.log($inputs);
  $inputs.prop('disabled', false);
});"


ui <- fluidPage(

  titlePanel("Hello Shiny!"),

  sidebarLayout(
    sidebarPanel(
      tags$head(tags$script(js)),
      navlistPanel(
        tabPanel("Component 1"),
        tabPanel("Component 2")
      )
    ),
    mainPanel(
      actionButton("buttonID","This adds 10 seconds of Sys.sleep"),
      textInput("textID","Write text here..."),
      selectInput("selectID","This should be disables while loading",choices=c("A","B","C"))
    )
  )
)

server <- function(input, output) { 
  observeEvent(input$buttonID,{
    Sys.sleep(10) 
  })
}

shinyApp(ui, server)

1 Ответ

0 голосов
/ 08 октября 2018

Есть более простой способ отключения виджетов с помощью пакета shinyjs.есть функция reactiveValuesToList, которая собирает все реактивные входы, которые у вас есть в session, и вы можете просто использовать это:

library(shiny)
library(shinyjs)

ui <- fluidPage(

  titlePanel("Hello Shiny!"),
  useShinyjs(), 
  sidebarLayout(
    sidebarPanel(
      navlistPanel(
        tabPanel("Component 1"),
        tabPanel("Component 2")
      )
    ),
    mainPanel(
      actionButton("buttonID","This adds 5 seconds of Sys.sleep"),
      textInput("textID","Write text here..."),
      selectInput("selectID","This should be disables while loading",choices=c("A","B","C"))
    )
  )
)

server <- function(input, output) { 

  observeEvent(input$buttonID,{
    myinputs <- names(reactiveValuesToList(input))
    print(myinputs)
    for(i in 1:length(myinputs)){
      disable(myinputs[i])
    }
    Sys.sleep(5) 
    for(i in 1:length(myinputs)){
      enable(myinputs[i])
    }
  })
}

shinyApp(ui, server)

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...