2012-06-27 13 views
8

मेरे पास 3 फाइलें हैं: layoutA.jade, layoutB.jade और index.jade। मैं प्रोग्रामेटिक रूप से सेट कर सकता हूं कि index.jade किस लेआउट का विस्तार करेगा?Node.js/Express 3.0 में विस्तार करने के लिए आप जेड टेम्पलेट के लिए गतिशील रूप से लेआउट कैसे सेट करते हैं?

मैं का उपयोग कर की कोशिश की है:

app.set('view options', { layout: false }); 

साथ:

res.render('index', { title: 'Express', layout: 'layoutB' }); // older 2.x way? 

मैं कुछ भी index.jade फ़ाइल में स्पष्ट रूप से सेट ओवरराइड नहीं कर पा रहे। Index.jade फ़ाइल के अंदर विस्तार रेखा को छोड़कर या तो काम नहीं किया।

+ views 
    + shared 
    - layoutA.jade 
    - layoutB.jade 
    + home 
    - index.jade 

सही क्रम में लेआउट सेटिंग जोड़ें, और जड़ विचारों फ़ोल्डर निर्दिष्ट करें::

app.set('views', __dirname + '/views'); 
app.set('view engine', 'jade'); 
app.set('view options', { layout: 'shared/layoutA' }); 

सुनिश्चित करें कि आप निर्दिष्ट करते हैं

उत्तर

6

कहना जेड फ़ाइलें निम्न निर्देशिका में हैं चलें सही फ़ोल्डर (इस मामले में 'विचार')। एक वैध डिफ़ॉल्ट लेआउट निर्दिष्ट करने के लिए भी सुनिश्चित करें। जांचें कि इससे पहले कि आप गहराई से गोता लगाएँ, यह परीक्षण पृष्ठ के साथ काम करता है।

एक बार है कि काम कर रहा है आप इस तरह डिफ़ॉल्ट लेआउट कर सकते हैं: यह,

if(someImportantVar) { 
    res.render('home/index', { title: 'Different layout!', layout: 'shared/layoutB' }); 
} else { 
    res.render('home/index', { title: 'Default layout!'}); 
} 
+0

मुझे सही अगर मैं गलत हूँ, लेकिन यह समाधान सही अब और नहीं है? –

+0

@AugustinRiedinger प्रश्न शीर्षक के अनुसार यह एक्सप्रेस 3.0 के लिए सही होना चाहिए। क्या यह उस संस्करण के भीतर काम नहीं करता है? – JimmyBoh

+0

मुझे नहीं लगता कि 'एक्सप्रेस 3' बनाम वर्तमान' एक्सप्रेस 4.x' के बारे में संगतता समस्या होगी लेकिन जेड-साइड पर: 'पग 2.0' का उपयोग करके, मैं बता सकता हूं कि 'व्यू विकल्प' पैरामीटर का उपयोग नहीं किया जाता है अब और (मुझे गलत होने में खुशी होगी)। सफलता के बिना जेड/पग में गतिशील लेआउट प्राप्त करने के लिए कई खोजों के माध्यम से किया गया, इसलिए गलत होने के बावजूद यह जवाब मुझे निराशाजनक रहा है। –