2011-12-26 9 views
10

Longshot सच है, लेकिन वहाँ कुछ इस तरह करने के लिए कोई रास्ता नहीं है, तो मैं सोच रहा हूँ:Haml: कंटेनर/आवरण तत्व बनाएं केवल अगर हालत

%p # ONLY SHOW THIS IF LOCAL VARIABLE show_paras IS TRUE 
    = name 

दूसरे शब्दों में, यह हमेशा सामग्री के अंदर पता चलता है, लेकिन अगर यह (कुछ हालत) सच है तो यह केवल इसके आसपास एक कंटेनर लपेटता है।

+0

इस का डुप्लिकेट है: http://stackoverflow.com/questions/72373 08/कैसे-कर-मैं-सशर्त रूप से-लपेटें-कुछ-हैमल-सामग्री-इन-ए-टैग –

उत्तर

15

आप कच्चे एचटीएमएल इस्तेमाल कर सकते हैं, लेकिन फिर आप शुरुआत और अंत में दोनों अगर बयान करना चाहते हैं: मान लिया जाये कि तुम सिर्फ = name की तुलना में अधिक कर रहे हैं

- if show_paras 
    <p> 
= name 
- if show_paras 
    </p> 

, तो आप एक आंशिक इस्तेमाल कर सकते हैं :

- if show_paras 
    %p= render "my_partial" 
- else 
    = render "my_partial" 

तुम भी haml के surround इस्तेमाल कर सकते हैं (हालांकि यह थोड़ा जटिल होता है):

- surround(show_paras ? "<p>" : "", show_paras ? "</p>" : "") do 
    = name 

अंत में, मैं शायद सब पर p टैग छोड़ करने की कोशिश क्या होगा नहीं है, और सिर्फ सीएसएस वर्गों का उपयोग जिस तरह से मैं चाहता हूँ देखने के लिए दो अलग-अलग p शैलियों स्थापित करने के लिए:

%p{:class => show_paras ? "with_paras" : "without_paras"} 
    = name 
+0

धन्यवाद, आस-पास की तरह की चीज़ मैं ढूंढ रहा था। जैसा कि आप कहते हैं, थोड़ा गन्दा, लेकिन आप इसे चारों ओर एक सहायक समारोह के निर्माण के साथ बहुत साफ कर सकते हैं। धन्यवाद! – mahemoff

2

स्पष्ट तरीका मैं ऐसा करने के बारे में सोच सकते हैं:

= show_paras ? content_tag(:p, name) : name 

लेकिन यह बिल्कुल सही नहीं है।

आम तौर पर मार्कअप, सामग्री के लिए है, इसलिए यदि show_paras एक और अधिक प्रस्तुतिकरण ट्वीक आप शायद सीएसएस का उपयोग करना चाहिए% p का व्यवहार बदलने के लिए है बजाय

+0

सच है, मैं आपका मुद्दा लेता हूं, लेकिन मेरे मामले में, यह थोड़ा अधिक शामिल है क्योंकि सशर्त सामग्री है जिसके अंदर यह कुछ मामलों में तर्कसंगत रूप से एक पैरा (या सेक्शन इत्यादि) बनाती है, लेकिन अन्य मामलों में, केवल एक साधारण div/span । – mahemoff

4

एक अन्य विकल्प के लिए एक वैकल्पिक टैग करता है, तो में लपेट के लिए है स्थिति उत्पन्न होने पर नहीं, haml_tag का उपयोग कर:

- haml_tag(show_paras ? :p : :div) do 
    = name 
+1

[प्रलेखन] (http://haml.info/docs/yardoc/Haml/Helpers.html#haml_tag-instance_method) – Carpetsmoker

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