gpt4 book ai didi

r - Shinyjs:[添加|删除]类在模块中不起作用

转载 作者:行者123 更新时间:2023-12-01 21:15:12 24 4
gpt4 key购买 nike

背景

在我的 shiny 模块中,我运行了一个冗长的计算。我想通过将光标更改为旋转圆圈来向用户提供一些视觉反馈。为此,我创建了一个 css.wait 并希望在 body 上使用 shinyjs::addClass 来显示新光标。然而,在模块内这不起作用,但它在主应用程序中起作用。如何将所需的行为添加到我的模块中?

代码

library(shiny)
library(shinyjs)

testUI <- function(id) {
ns <- NS(id)
tagList(useShinyjs(),
inlineCSS('.wait {cursor: wait;};'),
actionButton(ns("wait"), "wait"),
actionButton(ns("stop"), "stop"))
}

test <- function(input, output, session) {
observeEvent(input$wait, addClass(selector = "body", class = "wait"))
observeEvent(input$stop, removeClass(selector = "body", class = "wait"))
}

ui <- fluidPage(
useShinyjs(),
testUI("test"),
div("Test to show that 'wait' class works", class = "wait"),
actionButton("wait.main", "wait"),
actionButton("stop.main", "stop")
)
server <- function(input, output, session) {
callModule(test, "test")
observeEvent(input$wait.main, addClass(selector = "body", class = "wait"))
observeEvent(input$stop.main, removeClass(selector = "body", class = "wait"))
}

shinyApp(ui = ui, server = server)

最佳答案

我想这是一个范围界定问题。实现此功能的最简单方法是使用 shinyjs::runjs 直接运行相应的 JavaScript 代码。在您的模块中,使用

observeEvent(input$wait,  runjs(code = '$("body").toggleClass("wait");'))
observeEvent(input$stop, runjs(code = '$("body").toggleClass("wait");'))

这段代码的作用与toggleClass(class = "wait",selector = "body")完全相同。

这个答案可能会帮助您以“ Shiny 的方式”做到这一点:

observeEvent Shiny function used in a module does not work

关于r - Shinyjs:[添加|删除]类在模块中不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50759093/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com