弹出一个shinyFiles对话框R Shiny没有shinyFiles按钮

时间:2018-03-12 17:37:00

标签: r shiny

我想让我的Shiny应用程序中的一个tabPanel启动一个shinyFiles样式输入。在这种情况下,我想启动一个shinySaveButton,而我的数据集中没有shinySaveButton(通过单击保存图标[实际上是一个tabPanel])

下面的可重复示例

library(shiny)
library(shinyFiles)

ui <- navbarPage('Test App',id = "inTabset", selected="panel1",
                 tabPanel(title = "", value = "Save", icon = icon("save")),
                 tabPanel(title = "Panel 1", value = "panel1", 
                          h1("Panel1")),
                 tabPanel(title = "Panel 2",value = "panel2",
                          h1("Panel2"))
)

server <- function(input, output, session) {
  values = reactiveValues(tabSelected="panel1")
  observe({
    if (input$inTabset=="Save") {
      updateNavbarPage(session,"inTabset",selected=values$tabSelected)
      #CODE FOR LOADING SHINYFILES DIALOG IN HERE
    } else {
      values$tabSelected<-input$inTabset
    }
  })

}

shinyApp(ui, server)

非常感谢任何帮助。

1 个答案:

答案 0 :(得分:0)

使用隐藏元素技巧

library(shiny)
library(shinyFiles)
library(shinyjs)

jsCode<-"shinyjs.saveButton=function(){ $('#buttonFileSaveHidden').click(); }"
ui <- fluidPage(
      useShinyjs(),
      extendShinyjs(text = jsCode),
      navbarPage('Test App',id = "inTabset", selected="panel1",
                 tabPanel(title = "", value = "Save", icon = icon("save")),
                 tabPanel(title = "Panel 1", value = "panel1", 
                          h1("Panel1")
                          ),
                 tabPanel(title = "Panel 2",value = "panel2",
                          h1("Panel2"))
      ),
      # HIDDEN BUTTON TO INITIATE THE SAVE
      hidden(shinySaveButton( "buttonFileSaveHidden", 
                       label="", 
                       title="Save as ...",    
                       list('hidden_mime_type'=c("R")),       
                       class='hiddenButton')),
      wellPanel( #ONLY INCLUDED TO DISPLAY OF PATH INFO OF THE CHOICE
        h3('Current save path info'),
        tableOutput('table')
      )
)

server <- function(input, output, session) {
  values = reactiveValues(tabSelected="panel1")

  observe({
    if (input$inTabset=="Save") {
      updateNavbarPage(session,"inTabset",selected=values$tabSelected)
      #CODE FOR LOADING SHINYFILES DIALOG IN HERE
      js$saveButton()
    } else {
      values$tabSelected<-input$inTabset
    }
  })
  shinyFileSave(input, "buttonFileSaveHidden",   session=session, roots=c(wd="~"),  filetypes=c('R') ) #hidden

  # GET THE SAVE PATH CHOICE AND RECORD IT IN fp.dt.rv
  fp.dt.rv<-reactiveVal("")
  observeEvent(input$buttonFileSaveHidden,{
    fp.dt<-parseSavePath(c(wd='~'), input$buttonFileSaveHidden)
    fp.dt.rv(fp.dt) #or just use to immediately write.
  })
  # ONLY TO DISPLAY THE SAVE CHOICE
  output$table <- renderTable(fp.dt.rv())
}

shinyApp(ui, server)