2012-07-23 9 views
9

अरे दोस्तों!हैंडलबार्स में मददगारों के भीतर टेम्पलेट्स प्रस्तुत करना

क्योंकि इस पर कोई जवाब नहीं दिखता है: Passing variables through handlebars partial अभी तक, मैं वर्तमान में इस काम को पाने के लिए थोड़ा सा कामकाज पर काम कर रहा हूं। तो, विचार एक सहायक फ़ंक्शन पंजीकृत करना है जो संभावित मानों के साथ एक विशिष्ट टेम्पलेट प्रस्तुत करता है। थोड़ा कोड समझने में बेहतर बनाता है।

यह कैसे एक मैं अपने सहायक आह्वान होता है:

<div> 
    {{myHelper}} 
</div> 

यह सहायक इस छोटे से कोड के साथ पंजीकृत है:

hbs.registerHelper(name, function (args) { 
    args = args || {}; 
    var template = hbs.compile(fs.readFileSync(__dirname + '/' + file, 'utf8')); 
    return template(args); 
}); 

मैं कम से विभिन्न सहायकों रजिस्टर करने के लिए एक पाश में इस snippiet डाल एक बार। इसका मतलब है 'नाम' और 'फ़ाइल' दिया गया है। एक सहायक के भीतर

// 'values' could be something like this: 

var values = { headline: 'HEADLINE' } 

<div> 
    {{myHelper values}} 
</div> 

मैं अब परीक्षण कर सकते हैं अगर एक निश्चित मान दिया जाता है::

// myHelper template 

<div> 
    {{#if headline}} 
    <h1>{{headline}}</h1> 
    {{/if}} 
    <p>Lorem ipsum</p> 
</div> 

इस छोटे वैकल्पिक हल मेरे लिए काम करता

ठीक है अब मैं कुछ इस तरह करने में सक्षम हूँ , लेकिन एक समस्या है। उपरोक्त समझाए गए एक सहायक को पंजीकृत करना, एक सादा HTML से बचने वाली स्ट्रिंग देता है। तो, एक सहायक का आह्वान करना एक प्रस्तुत HTML स्निपेट आउटपुट नहीं करता है। यह एचटीएमएल को एक बच निकलने वाली स्ट्रिंग के रूप में आउटपुट करता है।

क्या आपके किसी को भी यह पता है कि मैं अपना कोड स्निपेट HTML को HTML के रूप में कैसे वापस कर सकता हूं?

/पास्कल

उत्तर

20

Handlebars doc से:

Handlebars एक Handlebars.SafeString बच नहीं होगा। यदि आप एक सहायक लिखते हैं जो अपना स्वयं का HTML उत्पन्न करता है, तो आप आमतौर पर एक नया हैंडलबार वापस करना चाहते हैं। सैफस्ट्रिंग (परिणाम)। ऐसे परिस्थिति में, आप मैन्युअल रूप से पैरामीटर से बचना चाहेंगे।

प्रयास करें

hbs.registerHelper(name, function (args) { 
    args = args || {}; 
    var template = hbs.compile(fs.readFileSync(__dirname + '/' + file, 'utf8')); 

    // return new hbs.SafeString(template(args)); 
    // From @Maroshii 
    // the SafeString method must be accessed through hbs.handlebars 
    // and not directly through hbs 
    // https://github.com/donpark/hbs#handlebars 

    return new hbs.handlebars.SafeString(template(args)); 
}); 
+0

हाँ! ये मेरे लिए सही है! दोस्त बहुत - बहुत धन्यवाद! – PascalPrecht

+10

यदि यह काम करता है, तो – brafales

+0

के अनुसार उत्तर को चिह्नित करें बस अगर कोई इसमें चलता है .... 'सुरक्षित स्ट्रिंग' विधि को 'hbs.handlebars' के माध्यम से एक्सेस किया जाना चाहिए और सीधे' hbs' के माध्यम से नहीं ... यह नोड के लिए है। जेएस उपयोगकर्ता :) – Maroshii

24

मैं सिर्फ करते रहे कि ट्रिपल कोष्ठक का उपयोग कर HTML में परिवर्तित करने के लिए किसी भी अतिरिक्त तरीकों को चलाने के लिए की आवश्यकता समाप्त करना चाहते हैं। उदाहरण के लिए, टेम्पलेट डेटा तक पहुंचने पर केवल ट्रिपल घुंघराले ब्रेसिज़ {{{templateData}}} का उपयोग करें, जो आपको कच्चे HTML प्राप्त करने की अनुमति देता है।

+0

इसने मुझे अपना जवाब खोजने में मदद की! स्व-परीक्षा – Fasani

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