shinyjs - setBookmarkExclude 用于延迟 ID

标签 shiny shinyjs

我试图从 Shiny 的响应式(Reactive)书签上下文中排除 ShinyJS 延迟。我发现 URL 中的延迟 ID 是自动生成的,并且始终不同:delay-ad190e10123bd97f960fed7a8a9e6fde=3000。

我试图通过正则表达式排除延迟,但我不相信正则表达式正在被解析:

setBookmarkExclude(
    c("delay-[[:alnum:]]"))

我想要一种方法来设置延迟 ID,以便每次都相同,或者通过正则表达式 setBookmarkExclude 来排除随机生成的延迟 ID

最佳答案

请参阅以下示例:

library(shiny)
library(shinyjs)

ui <- function(request) {
    fluidPage(
        useShinyjs(),
        br(),
        bookmarkButton(id="bookmarkBtn"),
        hr(),
        textOutput("ExcludedIDsOut"),
        hr(),
        sliderInput(inputId="slider", label="My value will be bookmarked", min=0, max=10, value=5),
        textOutput("out_1"),
        textOutput("out_2"),
        textOutput("out_3")
    )
}

server <- function(input, output, session) {
    
    observeEvent(input$bookmarkBtn, {
        session$doBookmark()
    })
    
    ExcludedIDs <- reactiveVal(value = NULL)
    
    observe({
        toExclude <- "bookmarkBtn"
        
        delayExclude <- grep("delay", names(input), value = TRUE)
        if(length(delayExclude) > 0){
            toExclude <- c(toExclude, delayExclude)
        }
        
        setBookmarkExclude(toExclude)
        ExcludedIDs(toExclude)
    })
    
    output$ExcludedIDsOut <- renderText({ 
        paste("ExcludedIDs:", paste(ExcludedIDs(), collapse = ", "))
    })
    
    delay(1000, {
        output$out_1 <- renderText({ 
            "My"
        })
    })
    
    delay(2000, {
        output$out_2 <- renderText({ 
            "delayed"
        })
    })
    
    delay(3000, {
        output$out_3 <- renderText({ 
            "output"
        })
    })
}

enableBookmarking(store = "url") # store = "server"
shinyApp(ui, server)

更新:白名单方法

library(shiny)
library(shinyjs)

ui <- function(request) {
  fluidPage(
    useShinyjs(),
    br(),
    bookmarkButton(id="bookmarkBtn"),
    hr(),
    textOutput("ExcludedIDsOut"),
    hr(),
    sliderInput(inputId="slider", label="My value will be bookmarked", min=0, max=10, value=5),
    textOutput("out_1"),
    textOutput("out_2"),
    textOutput("out_3")
  )
}

server <- function(input, output, session) {
  
  bookmarkingWhitelist <- c("slider")
  
  observeEvent(input$bookmarkBtn, {
    session$doBookmark()
  })
  
  ExcludedIDs <- reactive({
    toExclude <- setdiff(names(input), bookmarkingWhitelist)
    setBookmarkExclude(toExclude)
    toExclude
  })
  
  output$ExcludedIDsOut <- renderText({ 
    paste("ExcludedIDs:", paste(ExcludedIDs(), collapse = ", "))
  })
  
  delay(1000, {
    output$out_1 <- renderText({ 
      "My"
    })
  })
  
  delay(2000, {
    output$out_2 <- renderText({ 
      "delayed"
    })
  })
  
  delay(3000, {
    output$out_3 <- renderText({ 
      "output"
    })
  })
}

enableBookmarking(store = "url") # store = "server"
shinyApp(ui, server)

Here是一个相关的 GitHub 问题,请注意 session$getBookmarkExclude() 作为跟踪排除输入的替代方法。

关于shinyjs - setBookmarkExclude 用于延迟 ID,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55816861/

相关文章:

r - 是否可以在砖石网格中排列Shiny应用程序卡?

r - Shiny 的 R 直方图

r - 使用 Shinytest 测试可编辑的 DT

r - 可点击的超链接 Shiny R

shinydashboard - Highcharter - 单击事件以从图表中过滤数据

javascript - Shiny - 动态生成的输入

r - 传递 react 数据作为 updateSelectizeInput 的选择

r - 如何在 Shiny observeEvent 中监听多个事件表达式

javascript - 我尝试使用 R Shiny 部署应用程序,但网页立即退出并显示诊断信息已记录到我的 JavaScript 控制台

javascript - 在 Shiny 应用程序的 selectizeInput 中复制和粘贴文本