2012-12-20 7 views
16

मैं में स्थिति के आधार पर एचटीएमएल का एक हिस्सा करने के लिए एक सीएसएस वर्ग प्रदान करना चाहते हैं स्लिम-लैंगस्लिम-लैंग के अगर-किसी और नेस्टेड कोड

मैं निम्नलिखित

- if current_user 
    .title 
- else 
    .title_else 

कर सकते हैं कर रहा हूँ अब मैं कैसे एचटीएमएल लिखें जो ऊपर की कक्षा में से एक में घोंसला होना चाहिए? क्या मुझे if स्थिति और else दोनों स्थितियों में HTML लिखने की आवश्यकता है?

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

उत्तर

28

यहाँ एक एक लाइनर है। हालांकि, एक और तरीका है जो काम में आता है।

आप एक स्थानीय चर करने के लिए HTML प्रस्तुत करना capture का उपयोग करें, और उसके बाद जो कुछ भी नियंत्रण संरचना के अंदर आप की तरह है कि सामग्री एम्बेड कर सकते हैं। इसलिए, यदि आपका रैपिंग सामग्री में थोड़ा और अधिक जटिल था, यदि आप ऐसा करते हैं:

- shared_content = capture do 
    div This is displayed regardless of the wrapper 
- if current_user 
    | You're logged in! 
    .title 
    = shared_content 
- else 
    | You're not logged in! 
    .title_else 
    = shared_content 

मैं अक्सर एक यूआरएल उपलब्ध हो, तो एक कड़ी में सामग्री रैप करने के लिए इसका उपयोग करेंगे:

- image = capture do 
    img src=image_url 
- if url.blank? 
    = image 
- else 
    a href=url = image 
+3

बहुत अच्छा। इंटरपोलेशन की आवश्यकता नहीं है। '.thing वर्ग = (सच? 'बड़ा मेनू': 'मध्यम-मेनू')' – obfk

2

1) हाँ, आपके द्वारा बनाए divs के दोनों में HTML लिखने के लिए जब से तुम यह अलग होना चाहते हैं की जरूरत है। यदि आप इसे अलग नहीं करना चाहते थे तो if कथन की आवश्यकता नहीं होगी!

2) मैं वास्तव में अपनी बात समझ में नहीं आया है, लेकिन इस कोड मेरे साथ बिल्कुल ठीक काम किया:

- if true 
    .title 
    h4 True is true! 
- else 
    .title_else 
    h4 True is not true! 

इस कोड .title के एक वर्ग के साथ एक div और पाठ True is true! के साथ एक h4 इसके अंदर से पता चला ।

संपादित करें: ठीक है अब मैं देख रहा हूं कि आपका क्या मतलब है! यह ऐसा कुछ करने के लिए संभव है क्योंकि यह एच 4 प्रस्तुत नहीं करेगा!

- if true 
    .title 
- else 
    .title_else 

    h4 Same content, different class 

मैं तुम्हें सलाह देते हैं एक सहायक है जो आप आंशिक रेंडर करने के लिए और फिर बस दोनों स्थितियों के अंदर से है कि आंशिक प्रस्तुत करना अनुमति देता है लिखने के लिए होगा। इसका मतलब है कि आपको केवल उस आंशिक को लिखना होगा और इसे दो बार कॉल करना होगा।

.thing class=(current_user ? 'large-menu' : 'medium-menu') 
    h4 Same content, different class 
+0

मेरी सवाल है कि अगर ब्लॉक और अन्य ब्लॉक दोनों के लिए कोड का एक ही ब्लॉक है। मैं बस इस शर्त के आधार पर एक अलग वर्ग लागू करना चाहता हूं। कोड की पुनरावृत्ति से बचने के लिए कोई बेहतर तरीका है? – nik7

15

तुम सिर्फ दो विशेषताओं के बीच टॉगल कर रहे हैं, निश्चित रूप से Tiago Franco's answer अपने उद्देश्यों के लिए पर्याप्त है:

- if true 
    .title 
    = render 'footer' 
- else 
    .title_else 
    = render 'footer' 
संबंधित मुद्दे