我可以动态设置html类吗?或者 Shiny 是如何设置 'html'.hasClass('Shiny-busy') 的?
Posted
技术标签:
【中文标题】我可以动态设置html类吗?或者 Shiny 是如何设置 \'html\'.hasClass(\'Shiny-busy\') 的?【英文标题】: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 如何/何时设置类值?
【问题讨论】:
【参考方案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 变量以上是关于我可以动态设置html类吗?或者 Shiny 是如何设置 'html'.hasClass('Shiny-busy') 的?的主要内容,如果未能解决你的问题,请参考以下文章
Logback - 你能从 env 变量中定义 appender 名称和类吗?