2012-03-19 12 views
9

elsif मैं अपने Haml कोड में इस निर्माण की जरूरत है:Haml - अगर/निर्माण

- if something1 
    %div.a 
- elsif something2 
    %div.b 
- elsif something3 
    %div.c 
- else 
    %div.d 
    %div another content 

मैं उम्मीद हैं मैं की तरह कुछ मिलता है:

<div class="a|b|c|d"> 
    <div>another content</div> 
</div> 

लेकिन वास्तव में मैं

<div class="a|b|c|d"></div> 
    <div>another content</div> 
मिल

मुझे अपना कोड अपडेट करना होगा, अगर मुझे यह प्राप्त करने की आवश्यकता है:

कोई अन्य सामग्री

?

+0

किसी और के बाद एक मांगपत्र नहीं होना चाहिए ? – alexsuslin

उत्तर

8

मुझे लगता है कि आप के बजाय एक सहायक विधि बनाना चाहिए: पूरा करने के लिए इस त्रिगुट ऑपरेटरों (condition ? true_case : false_case) जो तथ्य यह है कि आप haml चयनित से दिए गए एक अच्छा समाधान की तरह ध्वनि नहीं करता है के साथ है

%div{:class => helper_method(useful_parameters)} 

वास्तव में बदसूरत तरीका और अपना कोड बेस साफ़ करना चाहते हैं।

+0

मुझे लगता है कि जब ओपी लिखता है 'ए | बी | सी | डी' उसका मतलब है कि वह या तो ए, बी, सी या डी चाहता है, उन सभी को एक साथ नहीं, लेकिन आपका उत्तर अभी भी लागू होता है। – Deleteman

+0

@Deleteman दूसरे विचार पर मुझे लगता है कि आप सही हैं। मैंने टिप्पणी हटा दी क्योंकि इसमें कोई मूल्य नहीं है। – Candide

+0

@Deleteman आप सही हैं। ** एक ** या ** बी ** या ** सी ** या ** डी **। – user984621

8

@ Ingenu सहायक विधि होशियार दृष्टिकोण की तरह दिखता है, लेकिन यदि आप इसे जल्दी और गंदी कोई आपत्ति नहीं है, तुम कर सकते हो:

- if something1 
    -divclass = 'a' 
- elsif something2 
    -divclass = 'b' 
- elsif something3 
    -divclass = 'c' 
- else 
    -divclass = 'd' 
%div{:class => divclass} 
    %div another content 
+0

अच्छा भी एक साथ! विचार के लिए धन्यवाद! – user984621

+0

fyi: यदि आप केवल एक निश्चित मामले में कक्षा शामिल करना चाहते हैं और अन्य मामलों में कुछ भी नहीं है तो आप 'शून्य' वापस कर सकते हैं और विशेषता 'वर्ग = "" '' '' '' – MMachinegun

0

आप अपने यदि इस मॉड्यूल के साथ हालत और उसके बाद का उपयोग smalltalk का विस्तार कर सकता है शैली की स्थिति

module IfTrue 
    def ifTrue &block 
     yield if self 
     slf=self 
     o = Object.new 
     def o.elseIf val, &block 
     yield if !slf && val 
     end 
    end 
    end 

अब आप इस तरह सामान कोड सकता है:

condition.extend(IfTrue).ifTrue{ 
    do_stuff 
    }elseIf(condition2){ 
    doOtherStuff 
    } 

या, यदि यदि आप एक शरारती बंदर patcher ;-) हैं:

Object.include IfTrue 

condition.ifTrue{ 
    do_stuff 
}elseIf(condition2){ 
    doOtherStuff 
} 

यदि आप एक से अधिक श्रृंखला के लिए चाहते elseif आप किसी भी तरह elsif परिभाषा बाँटे द्वारा इस कोड को अनुकूल करने के लिए होगा