चलिए उपयोग के मामलों से गुजरते हैं।
- content_for/yield_content
यह एक लेआउट फ़ाइल है कि उपयोगी हो सकता है में सामग्री इंजेक्शन लगाने के लिए है। उदाहरण किसी अन्य टेम्पलेट से लेआउट में अतिरिक्त सीएसएस/स्क्रिप्ट जोड़ रहा है। मार्गदर्शिका पर उदाहरण वही है, जो दिखाता है कि किसी भी टेम्पलेट से सीएसएस फ़ाइलों को अपने लेआउट में कैसे जोड़ना है। आप इसे साइडबार, अतिरिक्त लिंक इत्यादि पर सामग्री जोड़ने के लिए भी उपयोग कर सकते हैं। यह उन चीज़ों के लिए है जिन्हें अपने स्वयं के टेम्पलेट की आवश्यकता नहीं है, लेकिन दिखाए जा रहे दृश्य के आधार पर जानकारी को लेआउट पर वापस पास करने की आवश्यकता है।
- प्रस्तुत करना/आंशिक
प्रस्तुत करना एक मार्ग के साथ जुड़े किसी दिए गए टेम्पलेट को दिखाने के लिए है। एक मार्ग संसाधित होने के बाद मुख्य कार्यों के लिए प्रस्तुत करना चाहिए। आंशिक एक दृश्य में 'विधि' की तरह है। इसे पुन: उपयोग किया जा सकता है और आउटपुट को बदलने के लिए चर पारित किया जा सकता है। कोड को तोड़ने और विचारों के टुकड़ों का पुन: उपयोग करने के लिए आप मुख्य टेम्पलेट्स में आंशिक उपयोग करते हैं जो अन्यथा अनावश्यक लग सकते हैं।
- 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
मुझे उम्मीद है कि यह एक मूल अवलोकन के रूप में काम करता है। फ़ंक्शन ओवरलैप हो सकते हैं लेकिन आमतौर पर यह स्पष्ट हो जाता है कि विशिष्ट संदर्भ के आधार पर उपयोग कब किया जाए।
यह वास्तव में सहायक है, धन्यवाद। – ghostfly