2009-10-06 7 views
5

कहें कि मेरे पास एक दृश्य सहायक विधि के साथ एक चीज संसाधन है जैसे कि:क्या रेल में दृश्य सहायक द्वारा उत्पन्न हैम इंडेंट एचटीएमएल होना संभव है?

module ThingsHelper 
    def foo 
    ret = "" 
    3.times { ret += content_tag(:li, "foo") } 
    content_tag(:ul, ret) 
    end 
end 

यह, तब, टेम्पलेट में प्रयोग किया जाता है:

%p 
    = foo 

जेनरेट किया गया HTML स्रोत इस तरह दिखता है:

<!DOCTYPE html> 
<html> 
    <head> 
     <title>Foo</title> 
    </head> 
</html> 
<body> 
    <p> 
     <ul><li>foo</li><li>foo</li><li>foo</li></ul> 
    </p> 
</body> 

जैसा कि आप देख सकते हैं, सहायक कोड को शेष कोड के रूप में इंडेंट नहीं किया गया है। इसका समाधान करने का कोई तरीका?

उत्तर

10

हैमल के साथ प्रदान किए गए haml_tag helper method को आज़माएं। यह कुछ तरीकों से content_tag जैसा है, लेकिन यह ठीक से इंडेंट किए गए HTML आउटपुट करता है। मुख्य अंतर यह है कि यह स्ट्रिंग को वापस करने के बजाय सीधे टेम्पलेट पर आउटपुट करता है। उदाहरण के लिए:

module ThingsHelper 
    def foo 
    haml_tag :ul do 
     3.times { haml_tag(:li, "foo") } 
    end 
    end 
end 

(एक तरफ ध्यान दें के रूप में, यह खरोज के लिए दो रिक्त स्थान के अलावा कुछ का उपयोग करने के बहुत बुरा रूबी शैली माना जाता है)।

+0

बहुत अच्छा काम किया। पेड़-संरचित संग्रह के लिए एक फॉर्मेटर के साथ एक साधारण उदाहरण ब्लॉग किया: http://tumblr.com/xq73f3ypd –

1

मुझे शक है - कम से कम बिना किसी महत्वपूर्ण मात्रा में चकित किए।

आपका = foo बस आपके foo सहायक द्वारा वापस लौटाया गया प्रिंटिंग है - इसे हैमल द्वारा पार्स नहीं किया जा रहा है। और आप या तो अपने सहायक विधि में हैमल नहीं लिख सकते हैं।

इस बात से निपटने का सबसे आसान तरीका यह है कि आप अपने सहायक (यानी \n और \t) में शाब्दिक सफेद जगहों को जोड़ना चाहते हैं।

आप अपने सहायक में प्रासंगिक हैमल क्लास (एसएस) require भी कर सकते हैं और पार्सिंग विधियों को मैन्युअल रूप से ret पर कॉल कर सकते हैं, लेकिन यह शायद सार्थक से अधिक जटिल है।

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