2011-01-21 11 views
6

के लिए मामलों का उपयोग करें, मैंने http://www.padrinorb.com/guides/application-helpers पढ़ा लेकिन मुझे स्पष्ट नहीं है कि प्रत्येक व्यू हेल्पर्स के लिए उपयोग के मामले क्या हैं। विशेष रूप से, content_for/yield_content, render/partial, capture_html, and concat_content सभी एक साथ कैसे फिट होते हैं?विभिन्न पैड्रिनो हैमल हेल्पर्स

फ़िलहाल मेरी नियंत्रकों में render 'my/view' उपयोग कर रहे हैं और 'my/view' के भीतर कुछ =partial 'my/partial' में फेंक सिर्फ छोटे टुकड़ों में मुख्य टेम्पलेट फ़ाइल अलग तोड़ने के लिए।

इसके बारे में जाने का सही तरीका है? और जब मैं/अन्य सहायक कार्यों का उपयोग कब करूं?

उत्तर

12

चलिए उपयोग के मामलों से गुजरते हैं।

  1. content_for/yield_content

यह एक लेआउट फ़ाइल है कि उपयोगी हो सकता है में सामग्री इंजेक्शन लगाने के लिए है। उदाहरण किसी अन्य टेम्पलेट से लेआउट में अतिरिक्त सीएसएस/स्क्रिप्ट जोड़ रहा है। मार्गदर्शिका पर उदाहरण वही है, जो दिखाता है कि किसी भी टेम्पलेट से सीएसएस फ़ाइलों को अपने लेआउट में कैसे जोड़ना है। आप इसे साइडबार, अतिरिक्त लिंक इत्यादि पर सामग्री जोड़ने के लिए भी उपयोग कर सकते हैं। यह उन चीज़ों के लिए है जिन्हें अपने स्वयं के टेम्पलेट की आवश्यकता नहीं है, लेकिन दिखाए जा रहे दृश्य के आधार पर जानकारी को लेआउट पर वापस पास करने की आवश्यकता है।

  1. प्रस्तुत करना/आंशिक

प्रस्तुत करना एक मार्ग के साथ जुड़े किसी दिए गए टेम्पलेट को दिखाने के लिए है। एक मार्ग संसाधित होने के बाद मुख्य कार्यों के लिए प्रस्तुत करना चाहिए। आंशिक एक दृश्य में 'विधि' की तरह है। इसे पुन: उपयोग किया जा सकता है और आउटपुट को बदलने के लिए चर पारित किया जा सकता है। कोड को तोड़ने और विचारों के टुकड़ों का पुन: उपयोग करने के लिए आप मुख्य टेम्पलेट्स में आंशिक उपयोग करते हैं जो अन्यथा अनावश्यक लग सकते हैं।

  1. capture_html/concat_content

यह आमतौर पर अपने स्वयं के सहायकों कि सामग्री के ब्लॉक ले बनाने के लिए प्रयोग किया जाता है। उदाहरण के लिए चलिए एक सहायक बनाते हैं जो एक हैमल ब्लॉक लेता है और इसे एक div में लपेटता है।

# template.haml 
# NOTE the equals so the content is returned 
# and added to the view directly 
= div_wrapper do 
    %h1 Some heading 
    %p This is now wrapped in a div 

इस को लागू करने और एक टेम्पलेट में इसका इस्तेमाल करने के लिए आपको 'कब्जा' haml आदेश की कार्यवाही और फिर इसके चारों ओर एक div रैप करने के लिए ब्लॉक में पारित करने के लिए सक्षम होना चाहिए: उपयोग इस प्रकार है।

def div_wrapper(&block) 
    nested_content = capture_html(&block) 
    content_tag(:div, nested_content) 
end 

यह सामग्री लेने के लिए और इसे थूक से बाहर दृश्य एक div में लिपटे में होगा: यह जहां capture_html में आता है। अब, चलो मान हम इस सहायक और अधिक जटिल होना चाहते हैं और इसलिए आप उपयोग अधिक इस तरह रहना चाहता हूँ:

# template.haml 
# NOTE the dash so the content is not outputted directly 
- div_wrapper do 
    %h1 Some heading 
    %p This is now wrapped in a div 

लेकिन यह भी अन्य सहायकों में काम करता है: ठीक से करने के लिए

# some_helper.rb 
def example(name) 
    div_wrapper { "<h1>Test</h1>" } 
end 

आदेश में एक टेम्पलेट और सीधे रूबी दोनों में सहायक से लिपटे सामग्री को मुद्रित करें, हम concat_content का उपयोग कर सकते हैं और यह देखने के लिए जांच सकते हैं कि हमें टेम्पलेट में परिणाम को 'संक्षिप्त' करना है या बस इसे वापस करना है या नहीं।

def div_wrapper(&block) 
    nested_content = capture_html(&block) 
    tag_result = content_tag(:div, nested_content) 
    block_is_template?(block) ? concat_content(tag_result) : tag_result 
end 

मुझे उम्मीद है कि यह एक मूल अवलोकन के रूप में काम करता है। फ़ंक्शन ओवरलैप हो सकते हैं लेकिन आमतौर पर यह स्पष्ट हो जाता है कि विशिष्ट संदर्भ के आधार पर उपयोग कब किया जाए।

+0

यह वास्तव में सहायक है, धन्यवाद। – ghostfly

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