2012-11-23 16 views
7

मेरे पास उल्का में तीन सरल टेम्पलेट्स हैं, और सर्वर पर उनके नामों के संयोजन के साथ संग्रह है। मैं इन टेम्पलेट्स को गतिशील रूप से प्रस्तुत करने में सक्षम होना चाहता हूं कि उनके नाम किस संग्रह में हैं।टेम्पलेट नामों के संग्रह से उल्का टेम्पलेट कैसे प्रस्तुत करें?

वर्तमान में मैं संग्रह का सब्सक्राइब करने के लिए क्लाइंट का उपयोग करके इसे पूरा करने की कोशिश कर रहा हूं, और टेम्पलेट फ़ंक्शन के माध्यम से नामों तक पहुंच सकता हूं। दुर्भाग्यवश, यदि मैं नाम पर ">" चलाने का प्रयास करता हूं, तो उल्का टेम्पलेट के बजाय वैरिएबल नाम प्रस्तुत करने का प्रयास करता है।

तो, Template1 में एचटीएमएल प्रतिपादन template2, और template3 के बजाय, उत्पादन केवल पृष्ठ पर उनके नाम है: "Template1 template2 template3"।

यहां कोड है जिसका उपयोग मैं कर रहा हूं, मुझे आशा है कि मेटीर को मैन्युअल रूप से चलाने के बिना मेरे मुद्दे को हल करने का कोई तरीका है।

सर्वर js:

TemplatesToRender = new Meteor.Collection("templatesToRender"); 

TemplatesToRender.insert({templateName: "template3"}); 
TemplatesToRender.insert({templateName: "template2"}); 

क्लाइंट HTML:

<body> 
    {{#each templatesToRender}} 
     {{> templateName}}   // meteor trying to render a template 
            // called "templateName" instead of the 
            // variable inside templateName. 
    {{/each}} 
</body> 

<template name="template1"> 
    <span>Template 1</span> 
</template> 

<template name="template2"> 
    <span>Template 2</span> 
</template> 

<template name="template3"> 
    <span>Template 3</span> 
</template> 

उत्तर

4

आप एक render सहायक बना सकते हैं:

Handlebars.registerHelper('render', function(name, options) { 
    if (Template[name]) 
    return new Handlebars.SafeString(Template[name]()); 
}); 

और

{{render templateName}} 
+0

+1 महान समाधान! – Marc

+0

यह वही है जो मैं ढूंढ रहा हूं, धन्यवाद! –

+0

यहां समस्या स्मृति प्रबंधन है, वह टेम्पलेट को बार-बार उत्पन्न कर रहा है क्योंकि आप 'टेम्पलेट [नाम]()' फ़ंक्शन को कॉल करते हैं। यह विधि अच्छी है, लेकिन प्रतिस्थापित होने पर टेम्पलेट को ठीक से न हटाएं। मैं इसे परीक्षक करता हूं, और आप कुछ tousand fivs को डालने और हटाने के बाद, आपको 50 एमबी मेमोरी स्टैकिंग मिलती है! 2014 के लिए –

0

आपके पास अपनी स्क्रिप्ट में अपने html

<body> 

    {{> templateToRender}} 

</body> 

<template name="templateToRender"> 

    {{! use below to detect which template to render}} 

    {{#if templateName "template1"}} 
     {{> template1}} 
    {{/if}} 

    {{#if templateName "template2"}} 
     {{> template3}} 
    {{/if}} 

    {{#if templateName "template3"}} 
     {{> template3}} 
    {{/if}} 

</template 

<template name="template1"> 

    <p>this is template1</p> 

</template> 

<template name="template2"> 

    <p>this is template2</p> 

</template> 

<template name="template3"> 

    <p>this is template3</p> 

</template> 

में इस

करके देख सकते हैं

Template.templateToRender.templateName = (which) -> 
    # if user have a field like templateName you can do things like 
    tmplName = Meteor.user().templateName 
    # Session.equals will cause a template render if condition is true. 
    Session.equals which, tmplName 
0

के साथ उपयोग मैं टिप्पणी नहीं कर सकता (प्रतिष्ठा पर्याप्त उच्च नहीं :() ... लेकिन ...

मुझे निम्नलिखित प्रश्न के उत्तर के लिए थोड़ी देर के लिए खोज करने के बाद यह उत्तर मिला:

"उल्का में प्रस्तुत करने के लिए गतिशील रूप से या प्रोग्रामेटिक रूप से हैंडलबार टेम्पलेट का चयन कैसे करें"।

असल में, मैं एक चीज के प्रकार का संग्रह करना चाहता हूं, "ए", "बी" और "सी" कहें और, ऐसी चीजों के संग्रह के माध्यम से पुनरावृत्ति करते समय, मैं एक प्रकार-विशिष्ट टेम्पलेट का चयन करना चाहता हूं प्रत्येक के लिए प्रस्तुत करने के लिए ... जहां टेम्पलेट्स को "aThingItem", "bThingItem" और "cThingItem" नाम दिया गया है।

मेरा समाधान ऊपर दिए गए टॉम कोलमैन के उत्तर पर आधारित है और मुझे केवल अपनी स्थिति के लिए इसे काम करने के लिए थोड़ा सा ट्विक करने की आवश्यकता है। आपके उत्तर के लिए धन्यवाद टॉम!

मैंने यह "उत्तर" यहां केवल (उम्मीद है) दूसरों को मदद की है जो मेरे जैसे शब्दों के उत्तर खोजने की कोशिश कर रहे हैं।

0

उल्का 1।0 आज ही बाहर आया, और मैं सिर्फ 2014 में इस अद्यतन करना चाहते :)

https://docs.meteor.com/#/full/template_dynamic

{{> Template.dynamic template=template [data=data] }} 

नमूना उपयोग:

{{#each kitten}} 
    {{> Template.dynamic template=kitten_type data=this }} 
{{/each}} 
संबंधित मुद्दे