Мога ли да задам html клас динамично? Или как Shiny задава 'html'.hasClass('Shiny-busy')?

Така че това е по-скоро концептуален въпрос в отговор на получаване на известие за „заетост“, работещо върху моето лъскаво приложение, използвайки:

conditionalPanel(
        condition="$('html').hasClass('shiny-busy')",
        img(src="images/busy.gif"))  

Получих анимационен gif за показване по време на първоначална заявка към база данни, но след това става непредвидим. Добавих във втори условен панел с, за да скрия изходната графика, ако се направи ново извикване на база данни:

conditionalPanel(
     condition="!($('html').hasClass('shiny-busy'))",
     plotOutput("Some Graph"))  

Настройката работи през второто изтегляне на данни, но ако се направи трета заявка за база данни, „Some Graph“ вече не се скрива и „busy.gif“ вече не се показва. Той светва, когато се зарежда нов сюжет.

Така че моят основен въпрос е:
Има ли начин изрично да задам html класа в сървъра?
ИЛИ
Как/кога Shiny задава стойността на класа?


person Kevin    schedule 27.07.2015    source източник


Отговори (1)


Няма да коментирам останалата част от въпроса, но ще отговоря на въпроса "има ли начин изрично да зададете html класа в сървъра?"

Можете да използвате пакета shinyjs, за да добавите/премахнете/превключите класа на HTML елемент в сървъра. Ето пример за добавяне/премахване на класа "shiny-busy" към/формиране на маркера <html>

library(shiny)
library(shinyjs)

runApp(shinyApp(
  ui = fluidPage(
    useShinyjs(),
    actionButton("add", "add `shiny-busy` class to html tag"),
    actionButton("remove", "remove `shiny-busy` class from html tag")
  ),
  server = function(input, output, session) {
    observeEvent(input$add, {
      shinyjs::addClass(selector = "html", class = "shiny-busy")
    })
    observeEvent(input$remove, {
      shinyjs::removeClass(selector = "html", class = "shiny-busy")
    })    
  }
))
person DeanAttali    schedule 28.07.2015
comment
СТРАХОТНО!!!!!!!!!!!!!!!!!!!!!!!!!! Получавах съобщението за грешка, Сесията не е намерена и отне по-голямата част от деня, за да осъзная, че проблемът е в сървъра. R Нямах сесия като аргумент. - person Kevin; 29.07.2015
comment
Ако използвате най-новата версия на shinyjs (от GitHub, не от CRAN -- изтеглете я с devtools::install_github("daattali/shinyjs")), тогава вече нямате нужда от променливата на сесията - person DeanAttali; 29.07.2015