【问题标题】:How to pass Shiny browser timezone value from ui to server and readTzServer如何将闪亮的浏览器时区值从 ui 传递到服务器和 readTzServer
【发布时间】:2021-12-30 09:16:45
【问题描述】:

我有一个带有两个“ui”函数(ui 和 readTzUi)和两个“服务器”函数的模块化应用程序。对于应用程序,我想使用 readTzUi (input#client_time_zone_international) 从用户浏览器读取时区并将其传递给 readTzServer

我已经制定了一个可重现的应用示例。

您可以看到but_outout 变量可以通过readTzServer 访问,但input$client_time_zone_international 会产生NULL 值。

虽然input$client_time_zone_internationalreadTzServer 中不可用,但在server 中可用(readTzServerserver 的时区值都打印在控制台中)

到目前为止我尝试过的一些事情是:

  1. 使用 Callmodule 将 input$client_time_zone_international 从服务器传递到 readTzServer
  2. 创建input$client_time_zone_international的全局变量
  3. readTzUiShiny.setInputValue() 的变量中捕获input$client_time_zone_international

所有这些选项都没有将input$client_time_zone_international 值传递给readTzServer

希望有人能帮我解决这个问题。

library(shiny)

readTzUi <- function(id, label = "readTz"){
  ns <- NS(id)
  
  fluidPage(
  tags$script('
  $(function() {
    $("input#client_time_zone_international").val(Intl.DateTimeFormat().resolvedOptions().timeZone)
  });    
'),
textInput("client_time_zone_international", "Time zone international", value = ""),
tags$br(),
actionButton(ns("button"), label = label),
verbatimTextOutput(ns("but_out")),
verbatimTextOutput(ns("out"))
)
  
}

readTzServer <- function(id){
  moduleServer(
    id,
    function(input, output, session){
      
      # This is where I need the timezone value
      observe(print(input$client_time_zone_international))
      
      count <- reactiveVal(0)
      observeEvent(input$button, {
        count(count() + 1)
      })
      output$but_out <- renderText({
        count()
      })
      count
      
      
                 observe({
                 output$out <- renderText({
                   "Hello"
                   })
                 })
               }
    )
}

ui <- fluidPage(
  
 readTzUi("readtz1", "Counter#2")
)


server <- function(input, output, session) {
  
  readTzServer("readtz1")
  
  observe(
    print(input$client_time_zone_international)
    )
  
}

shinyApp(ui, server)

【问题讨论】:

    标签: r shiny server timezone logic


    【解决方案1】:

    这是如何获取时区的示例:

    library(shiny)
    
    ui <- basicPage(
      tags$script("$(document).on('shiny:sessioninitialized', function(event) {
                                            var n = Intl.DateTimeFormat().resolvedOptions().timeZone;
                                            Shiny.onInputChange('client_time', n);});")
    )
    
    server <- function(input, output, session) {
      
      observe({
        req(input$client_time)
        print(input$client_time)
      })
      
    }
    
    shinyApp (ui = ui, server = server)
    

    【讨论】:

    • 感谢您抽出时间猪排,但这并不能完全回答我的问题。我的应用程序中也有可用的客户端时间,但现在我希望“readTzServer”中也有可用的客户端时间。任何想法如何将值传递给 readTzServer?
    猜你喜欢
    • 1970-01-01
    • 2020-06-05
    • 1970-01-01
    • 2015-03-18
    • 1970-01-01
    • 1970-01-01
    • 2020-01-03
    • 2022-08-18
    • 1970-01-01
    相关资源
    最近更新 更多