R shine ui对象显示顺序

时间:2016-07-07 03:02:11

标签: r shiny shinydashboard shinyjs

我正在构建一个简单的闪亮应用程序,它将从用户那里获取输入并从数据库中的表中获取数据,并将要下载的记录数作为输入并提供下载文件选项。

以下所有内容都可以。我唯一关心的是textInput栏(变量:uiOutput(" text")在ui中,输出$ text在服务器中)仅在显示datatableOutput后出现。我不明白为什么会这样。

理想情况下,我希望一旦选择了叶子(即输入$ leaf1不为空),就会显示textInput栏(' uiOutput(" text")')对象然后我希望显示datatableOutput,然后应该出现下载按钮。

有没有办法实现这个目标?谢谢

library(shiny)
library(shinydashboard)
#library(stringr)
library(DT)
#library(shinyBS) 


ui <- dashboardPage(
  dashboardHeader(title = strong("DASHBOARD"),titleWidth = 240),
  dashboardSidebar(
    sidebarMenu(
     selectizeInput("x", "Choose a number:", choices = sort(unique(lftable$x)), multiple = TRUE),
     uiOutput("leaf_categ")

  )
  ),
  dashboardBody(
    fluidRow(
      uiOutput("text"),
      dataTableOutput("lm_df"),
      downloadButton('downloadData', 'Download')

 )))


server <- function(input, output){
  output$leaf_categ <- renderUI(
    selectizeInput("leaf1", "Choose leaf categories:",
                  choices = reactive(unique(lftable[lftable$num %in% input$x, c("X_NAME")]))(),
                  multiple = TRUE)

  ) 

  #### creates a text input box
  #### number of records to be downloaded is provided as input 
  output$text <- renderUI({
    if(is.null(reactive(input$leaf1)())){
      return()
    }else{
      textInput("var1", label = "Enter the number of records to be downloaded", value = "")
    }
  })

  #### fetches data from DB
  lm <- reactive({
    if(is.null(input$leaf1)){
      return()
    }else{
      leaf_id <- unique(lftable[lftable$X_NAME %in% input$leaf1, c("leaf_id")])
      query_str <- paste('select * from table1 where current_date between start_dt and end_dt and score_num >= 0.1 and x in (' , input$x, ')', ' and X_ID in (', leaf_id, ')', ';', sep = "")
    }
    lm_data <- getDataFrmDW(query_str)
  })

  ###creates a download tab
  output$downloadData <- downloadHandler(
    filename = function() { paste("lm_user_data", '.csv', sep='') },
    content = function(file) {
      lm_df <- lm()
      lm_df <- lm_df[1:(as.integer(input$text)),]
      print(dim(lm_df))
      write.csv(lm_df, file, row.names = F)
    })

  output$lm_df <- DT::renderDataTable(lm())


}
shinyApp(ui, server)

0 个答案:

没有答案