2011-06-11 9 views
28

मैं Handlebars.js टेम्पलेट इंजन के साथ काम कर रहा हूँ और इस (काल्पनिक उदाहरण) की तरह कुछ करने के लिए एक तरह से यह पता लगाने की कोशिश कर रहा हूँ इस तरह सहायक:Handlebars में तो ब्लॉक के भीतर हेल्पर कॉलिंग खाका

Handlebars.registerHelper("itemSelected", function(item) { 
    var selected = false; 
    // Lots of logic that determines if item is selected 
    return selected; 
}); 

मैं जब टेम्पलेट के लिए इस वाक्य विन्यास का उपयोग करने की कोशिश कर त्रुटियों मिलता है, और मैं बात इस तरह का दिखा किसी भी उदाहरण नहीं मिल सकता है। मैं इस तरह सरल #if ब्लॉक देख पा रहे हैं ...

{{#if myValueInContext}} 
    <div>This will show if myValueInContext results in a truthy value.</div> 
{{/if}} 

लेकिन, मुझे समझ नहीं पहला उदाहरण से निपटने के लिए कैसे। शायद मैं इस गलत के करीब आ रहा हूँ।

वैसे, मैंने इस मूंछ को टैग किया क्योंकि मैं प्रश्न में हैंडलबार टैग नहीं जोड़ सका।

+0

मूंछ को हटाकर और handlebars.js – Rajat

उत्तर

30

मुझे नहीं लगता कि यह काम करने जा रहा है। अगर मैं हैंडलबार्स दस्तावेज को सही समझता हूं, तो #if एक पंजीकृत ब्लॉक-हेल्पर स्वयं है और तर्क के रूप में एक और पंजीकृत सहायक नहीं लेता है।

प्रलेखन के अनुसार आप यह है कि


Handlebars.registerHelper('ifItemSelected', function(item, block) { 
    var selected = false; 
    // lots of logic that determines if item is selected 

    if(selected) { 
    return block(this); 
    } 
}); 

तरह लागू हो सकता है बाद में आप


{{#ifItemSelected SomeItem}} 
    This was selected 
{{/ifItemSelected} 

से कॉल करने में सक्षम होना चाहिए, लेकिन आप यकीन है कि SomeItem उचित प्रारूप है करना है । मुझे एक पंजीकृत हैंडलर को if if स्टेटमेंट में सशर्त के रूप में उपयोग करने का कोई तरीका नहीं दिख रहा है।

Handlebars.registerHelper('ifItemSelected', function(item, options) { 
    var selected = false; 
    // lots of logic that determines if item is selected 

    if (selected) { 
    return options.fn(this); 
    } 
}); 

अर्थात्:

+0

परफेक्ट करके अपना टैग फिक्स्ड करें। यह अच्छी तरह से काम किया। धन्यवाद! – Kevin

+0

@ gnowoel का उत्तर आधुनिक हैंडलबार्स –

43
Handlebars के पिछले संस्करण (1.0.rc.1) के साथ

, आप sth लिखना पसंद है।

Handlebars.registerHelper('ifItemSelected', function(item, options) { 
    var selected = false; 
    // lots of logic that determines if item is selected 

    if (selected) { 
    return options.fn(this); 
    } 
    else { 
    return options.inverse(this); 
} 
}); 

उपयोग किया: ब्लॉक (इस)options.fn (यह)

http://handlebarsjs.com/block_helpers.html#conditionals

+4

के लिए बेहतर फिट हो सकता है नवीनतम हैंडलबार्स संस्करण के रूप में, यह स्वीकार्य उत्तर –

4

आप एक किसी और विकल्प भी करना चाहते हैं, तो आप इस कोड की आवश्यकता होगी की जगह के साथ:

{{#ifItemSelected SomeItem}} 
    This was selected 
{{else}} 
    This was not selected 
{{/ifItemSelected} 
64

आपको एम्बेडेड हेल्पर इनवोकैट के आसपास कोष्ठक जोड़ना चाहिए आयन:

{{#if (itemSelected "SomeItem")}} 
    <div>This was selected</div> 
{{/if} 

मैंने प्रयोग किया और सत्यापित किया कि यह सिर्फ काम करता है।

यह सुनिश्चित नहीं है कि हैंडलबर्स दस्तावेज़ में इसका उल्लेख किया गया है या नहीं। मैंने handlebars-layouts के उदाहरणों से चाल सीखी।

+12

होना चाहिए यह उच्च होना चाहिए। – Aerowind

+10

हाँ, यह एक [subexpression] है (http://handlebarsjs.com/expressions.html#subexpressions)। यह आधिकारिक तौर पर समर्थित है, इसलिए यह सबसे आसान तरीका है। – Pathoschild

+4

धन्यवाद! जिसे सही उत्तर के रूप में चिह्नित किया जाना चाहिए। – kokeksibir