2

したがって、これは、次を使用して光沢のあるアプリで動作する「ビジー」通知を取得することに対応する、より概念的な質問です。

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

データベースへの最初のクエリ中に表示するアニメーション gif を取得しましたが、その後は予測不能になります。新しいデータベース呼び出しが行われた場合に出力グラフを非表示にするために、2 つ目の conditionalPanel を追加しました。

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

セットアップは 2 回目のデータ プルで機能しますが、3 回目のデータベース クエリが行われると、「Some Graph」は非表示にならず、「busy.gif」は表示されなくなります。新しいプロットがロードされると、フラッシュアップします。

したがって、私の包括的な質問は次のとおり
です。サーバーでhtmlクラスを明示的に設定する方法はありますか?
または
Shiny はどのように/いつクラス値を設定しますか?

4

1 に答える 1

4

残りの質問についてはコメントしませんが、「サーバーで 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")
    })    
  }
))
于 2015-07-28T00:59:47.640 に答える