【发布时间】:2021-12-30 09:16:45
【问题描述】:
我有一个带有两个“ui”函数(ui 和 readTzUi)和两个“服务器”函数的模块化应用程序。对于应用程序,我想使用 readTzUi (input#client_time_zone_international) 从用户浏览器读取时区并将其传递给 readTzServer。
我已经制定了一个可重现的应用示例。
您可以看到but_out 和out 变量可以通过readTzServer 访问,但input$client_time_zone_international 会产生NULL 值。
虽然input$client_time_zone_international 在readTzServer 中不可用,但在server 中可用(readTzServer 和server 的时区值都打印在控制台中)
到目前为止我尝试过的一些事情是:
- 使用 Callmodule 将
input$client_time_zone_international从服务器传递到readTzServer - 创建
input$client_time_zone_international的全局变量 - 在
readTzUi和Shiny.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