R / Shiny立即更新输入控制

时间:2015-10-29 12:50:41

标签: r shiny

我有一个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的文档说:

  

输入更新程序功能向​​客户端发送消息,告诉它   更改输入对象的设置。收集消息   并在所有观察员(包括产出)完成后发送   运行

我想在没有此集合和/或页面加载的情况下更新控件。这怎么可能?

1 个答案:

答案 0 :(得分:0)

您可以使用适当的值初始化UI。然后,初始渲染将使用您选择的值。

ui <-dashboardPage(
  dashboardHeader(...),
  dashboardSidebar(
    dateRangeInput("dates",
                   "Date range",
                   start = as.character(Sys.Date()-4),
                   end = as.character(Sys.Date())),
  ),
  dashboardBody(
  .
  .
  .
  )
)