2012-09-07 13 views
5

संभव डुप्लिकेट Haml टेम्पलेट में एक वर्ग को जोड़ने के लिए है कि क्या परीक्षण करने के लिए:
Append class if condition is true in Haml (with Rails)साफ रास्ता सशर्त

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

%li.current 
    Menu item A 
%li 
    Menu item B 
%li 
    Menu item C 

मैं एक सिनात्रा ध्यान में रखते हुए इस कोड है और प्रोग्राम के रूप में class=current जोड़ने के लिए, देखने के लिए एक पैरामीटर के आधार पर हैं:

Haml में, इस तरह दिखता है।

मैं इसे सबसे अच्छे तरीके से कैसे कर सकता हूं?

वर्तमान में, मैं इसे इस तरह कर रहा हूँ:

- if section == "pages" 
    %li.current 
     %a{:href => "#pages"} Pages 
    - else 
    %li 
     %a{:href => "#pages"} Pages 

कौन सा भी वर्बोज़ महसूस करता है।

उत्तर

17

आप निर्धारित करने के लिए कक्षा% ली

%li{ :class => ('current' if section == "pages") } 
    %a{ :href => "#pages" } Pages 
+0

धन्यवाद @ mguymon, जो मैं –

+0

के लिए देख रहा था, आप haml के साथ प्रति तत्व विभिन्न वर्गों के लिए एकाधिक ifs का उपयोग कैसे कर सकते हैं? – v3nt

+0

आदर्श रूप से आप सभी सशर्त इनलाइन को क्रैक नहीं करेंगे, यह बदसूरत और पढ़ना मुश्किल होगा। इसके बजाय, कक्षा नामों की स्ट्रिंग का निर्माण करें और इसे हैमल टैग में पास करें। – mguymon

3

के लिए आवश्यक है section अन्य स्ट्रिंग बल्कि "pages" से, आप कुछ का उपयोग करना चाहिए mguymon की तरह जवाब हो सकता है, तो सशर्त इनलाइन कर सकते हैं। लेकिन अगर यह केवल nil, false या "pages" हो सकता है इस कोड को अधिक संक्षिप्त है:

%li{ class:section && 'current' } 
    %a{ :href => "#pages" } Pages 

इस सिद्धांत का उपयोग करें कि Haml nil या false विशेषताओं को छोड़ देते हैं और रूबी में हर वस्तु true रूप evalueted है, को छोड़कर,: false और nil

तो, अगर sectionnil या false से अलग, section && 'current' आउटपुट 'current' वरना यह आउटपुट false वर्ग विशेषता को छोड़ते हुए है तो।

+1

धन्यवाद @ waldyr-ar, यह भी उपयोगी है :) –

+1

@DanielMay आपका स्वागत है! हम इसके लिए यहाँ हैं! :) –

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