2011-11-13 10 views
12

मेरे पास मिश्रित प्रकार के गुणों का एक वस्तु है - कुछ तार, तारों के कुछ सरणी, तारों के सरणी वाले कुछ ऑब्जेक्ट्स - जो संभावित रूप से कई स्तरों को गहराई से चला सकते हैं।जेड टेम्पलेट में किसी ऑब्जेक्ट पर रिकर्सिव पुनरावृत्ति?

मैं सभी गुणों पर पुन: प्रयास करना चाहता हूं ताकि कोई ऑब्जेक्ट एक div बनाता है, एक सरणी एक div बनाता है, और एक स्ट्रिंग प्रॉपर्टी टेक्स्ट को रखने के लिए एक अवधि बनाती है।

{ "string" : "some text", "object" : { "array" : [ "text" ] } } 

ऊपर वस्तु के रूप में प्रस्तुत करना होगा:

<span>some text</span> 
<div> 
    <div> 
    <span>text</span> 
    </div> 
</div> 

लेकिन आम तौर पर और अधिक जटिल संरचनाओं। जेड को पूरा करने के बारे में मुझे कैसे जाना चाहिए?

उत्तर

13

यह पूछने के बाद से कुछ समय हो गया है, लेकिन mixin आपका मित्र है, मुझे लगता है। मैं इसे बाहर प्रयास नहीं किया है, लेकिन अगर mixins प्रत्यावर्तन का समर्थन, यह काम करना चाहिए:

mixin parseObject(obj) 
    div 
    - each val, key in obj 
     - if (typeof val === 'string') 
     span #{val} 
     - else if (typeof val === 'object') 
     mixin parseObject(val) 

फिर अपने .jade फ़ाइल के शरीर में, फोन mixin parseObject(rootObject)

+1

3 पार्टी यहाँ कहते हैं। मैंने कोशिश की, लेकिन मिश्रण में रिकर्सन पसंद नहीं है :( –

+0

@ रॉबर्ट मार्टिन: अब यह है :) –

+0

मूल पोस्टर के रूप में, मैंने 'mixin' (धन्यवाद ** 0x80 **) शामिल करने के लिए अपना कोड अपडेट किया है और उचित '-' उपसर्ग। –

5

रिकर्सन अब समर्थित है। मैंने सफलतापूर्वक एक मामूली चिमटा के साथ समारोह का उपयोग किया है; फ़ंक्शन को कॉल करते समय आपको मिक्स्ड कीवर्ड का उपयोग करने की आवश्यकता है।

mixin parseObject(obj) 
    div 
    each val, key in obj 
     if typeof val === 'string' 
     span #{val} 
     else if typeof val === 'object' 
     mixin parseObject(val) 
5

जेड का आधुनिक संस्करण में यह की तरह

mixin parseObject(obj) 
    div 
    each val in obj 
     if typeof val === 'string' 
     span= val 
     else if typeof val === 'object' 
     +parseObject(val) 

लग रहा है फिर अपने .jade फ़ाइल के शरीर में,

+parseObject(rootObject)

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