【问题标题】:Can I set html class dynamically? Or how does Shiny set 'html'.hasClass('Shiny-busy')?我可以动态设置html类吗?或者 Shiny 是如何设置 'html'.hasClass('Shiny-busy') 的?
【发布时间】:2015-10-18 06:17:49
【问题描述】:

所以这更像是一个概念性问题,以响应在我闪亮的应用程序上使用“忙碌”通知:

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 如何/何时设置类值?

【问题讨论】:

    标签: html shiny shinyjs


    【解决方案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")
        })    
      }
    ))
    

    【讨论】:

    • 太棒了!!!!!!!!!!!!!!!!!!!!!!!!!我收到错误消息“找不到会话”,并且花了一天的大部分时间才意识到问题出在服务器中。R 我没有会话作为参数。
    • 如果您使用最新版本的 shinyjs(来自 GitHub,而不是来自 CRAN - 使用 devtools::install_github("daattali/shinyjs") 下载它),那么您不再需要 session 变量
    猜你喜欢
    • 2023-03-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-07-28
    • 2020-01-12
    • 1970-01-01
    • 2018-02-10
    • 1970-01-01
    相关资源
    最近更新 更多