我有一个Shiny UI,可以启动一些长时间运行的服务器代码。我想在页面加载时使用一些计算的默认值更新输入控件,并立即显示和使用(长时间运行的代码在页面加载或提交按钮时触发)。我的服务器的开头是这样的:
shinyServer(
function(input, output, session) {
observe({
startDate <- weekdaysBefore(Sys.Date(), 5)
endDate <- weekdaysBefore(Sys.Date(), 1)
updateDateInput(session, 'startDate', value = startDate)
updateDateInput(session, 'endDate', value = endDate)
})
# long-running calculations
但是,控件仅在其他所有内容运行后才会更新。这意味着UI在代码运行时显示控件的初始值而不是上面的计算值,服务器代码以初始值运行,然后在显示结果时控件更新以显示所需的值 - 但不是正在展示的。 updateDateInput
的文档说:
输入更新程序功能向客户端发送消息,告诉它 更改输入对象的设置。收集消息 并在所有观察员(包括产出)完成后发送 运行
我想在没有此集合和/或页面加载的情况下更新控件。这怎么可能?
答案 0 :(得分:0)
您可以使用适当的值初始化UI。然后,初始渲染将使用您选择的值。
ui <-dashboardPage(
dashboardHeader(...),
dashboardSidebar(
dateRangeInput("dates",
"Date range",
start = as.character(Sys.Date()-4),
end = as.character(Sys.Date())),
),
dashboardBody(
.
.
.
)
)