即使在隐藏时,在conditionalPanel内部调用的输出也会被调用

时间:2015-08-17 17:38:55

标签: r shiny

我在shinyapp的标题上有一个输入日期,我希望显示选项卡面板,并且只有在选择工作日时才会调用输出。我之所以需要这样做是因为我的一些输出必须进行大量查询并花费大量时间。

所以我创建了一个输出$ check_refdate来检查所选日期是否有效,并在每个标签内的conditionalPanel中使用它。但我所知道的是,即使隐藏了我的输出也被调用(至少在开始时:如果我选择两个假期,一个接一个,输出在第一个假期而不是第二个假期触发)。我尝试将suspendWhenHidden显式设置为TRUE,但输出仍然被调用...

这是一个小例子:

## global
library(shiny)
library(DT) 
# add ANBIMA holidays
library(lubridate)
library(bizdays)
.calendar <- bizdays::Calendar(holidaysANBIMA, weekdays=c('saturday', 'sunday'), dib=252, name='ANBIMA')
bizdays::bizdays.options$set(default.calendar=.calendar)


## ui
shinyUI(
navbarPage(
title = 'Testing Hidden Output', 
header =
   fluidRow(
      inputPanel(
         div('Data de Referência: ', style = "font-size:18px"), 
         dateInput("refdate", label = NULL, value = Sys.Date()),
         align = 'center'
      ),
      htmlOutput("check_header")
   ),

   tabPanel('test',
      conditionalPanel(
         condition = "!output.check_header",
         column(4, plotOutput("plotdata"))
      )
   ) 
 )
)

## server
shinyServer (function(input, output, session) {
   cdata <- session$clientData

   checkrefdate <- reactive({ 
     print('checking refdate')
     if(input$refdate == adjust.previous(input$refdate)) return(NULL)
     tags$h1('Choose a bizdays day!', align = 'center', 
         style = 'color: red; padding-top: 5%;')
     })
     output$check_header <- renderUI({ checkrefdate() })

     selectData <- reactive( x <- 1:10 )
     output$plotdata <- renderPlot({ 
       # if suspendWhenHidden=T, should never print on console "plotdata:  TRUE ", right?
       cat('plotdata_hidden: ', cdata[['output_plotdata_hidden']], '\n') 
       plot(selectData(), main = '') 
     })
     outputOptions(output, 'plotdata', suspendWhenHidden = T)
  })

由于

0 个答案:

没有答案