2013-10-30 6 views
19

तो मैं एक चमकदार ऐप बनाने की कोशिश कर रहा हूं जहां मेरे पास एक बटन है जो केवल फाइलों को अपलोड होने पर दिखाता है; इसके लिए मैं सशर्त पैनेल का उपयोग कर रहा हूँ।सशर्त बनाना फ़ाइल फ़ाइल के साथ अपलोड की गई फ़ाइलों पर निर्भर करता है इनपुट

ui.R:

require(shiny) 
shinyUI(pageWithSidebar(
    headerPanel("My App"), 

    sidebarPanel(
    fileInput("files", "Choose file"), 
    conditionalPanel(
     condition = "input.files", 
     actionButton("submitFiles", "Submit files for processing"))), 

    mainPanel(h3("Nothing to see here")) 
)) 

मैं वहाँ कुछ भी मेरी server.R में के बारे में देखभाल करने के लिए है, के बाद से ऊपर के उदाहरण कुछ नहीं कर करता है नहीं लगता। उपर्युक्त स्थिति के साथ, बटन कभी दिखाई नहीं देता है, यानी यह स्थिति कभी भी सच नहीं होती है।

कुछ बातें मैं अपनी हालत के लिए कोशिश की है input.files.length > 0, input.files.size() > 0, जो दोनों के इससे पहले कि मैं एक फ़ाइल अपलोड मौजूद होने बटन में परिणाम कर रहे हैं। मुझे लगता है कि ऐसा इसलिए है क्योंकि इनपुट $ फ़ाइलें एक खाली डेटा है। फ़ाइलों को चुनने से पहले फ्रेम, और इसलिए शून्य-शून्य लंबाई/आकार है, क्या यह सही है?

कम से कम एक फ़ाइल अपलोड होने तक बटन को छिपाने के लिए मैं किस स्थिति का उपयोग कर सकता हूं?

मुझे लगता है कि एक और विकल्प uiOutput साथ conditionalPanel बदल दें और server.R में एक निरीक्षण/अलग ब्लॉक जो input.files देख रहा है (if (nrow(input$files) < 1) return()) के अंदर renderUI({actionButton(...)}) कॉल करने के लिए हो सकता है; क्या यह एकमात्र तरीका है? अगर मैं इसे किसी भी तरह से कर सकता हूं, तो मुझे एक या दूसरे को चुनने के लिए क्या होगा (conditionalPanel से कम परिणामस्वरूप कम कोड)?

उत्तर

30

आपको अपलोड करने की स्थिति को वापस करने वाला एक प्रतिक्रियाशील आउटपुट बनाना होगा और इस आउटपुट के suspendWhenHidden को FALSE पर विकल्प सेट करना होगा।

अधिक सटीक, सर्वर में। आर आपके पास निश्चित रूप से एक प्रतिक्रियाशील कार्य है, getData() अपलोड फ़ाइल से डेटाफ्रेम बनाने के लिए कहें। तब ऐसा करते हैं:

getData <- reactive({ 
    if(is.null(input$files)) return(NULL) 
    ...... 
    }) 
    output$fileUploaded <- reactive({ 
    return(!is.null(getData())) 
    }) 
    outputOptions(output, 'fileUploaded', suspendWhenHidden=FALSE) 

और ui.R में आप conditionalPanel() उपयोग कर सकते हैं करने से:

conditionalPanel("output.fileUploaded", 
    ...... 
+1

अहा, मैं भी 'पता नहीं था outputOptions()' अस्तित्व में! यह आपकी 'आउटपुट' सूची में कुछ छिपाने का एक मुश्किल तरीका है, लेकिन यह काम करता है। – ClaytonJY

+2

ऐसा लगता है कि कुछ बदल गया है और अब किसी को आउटपुट करना होगा। Output.fileUploaded == true "'। –

संबंधित मुद्दे