2012-08-03 16 views
9

ब्लॉक करता है तो क्या संभवतः हैंडलबर्स सशर्त में वैश्विक चर का उपयोग करना संभव है? मैं एक ऐप लिख रहा हूं जिसमें कई ऑब्जेक्ट्स सूचीबद्ध हैं, और मैं चाहता हूं कि उपयोगकर्ता यह नियंत्रित कर सकें कि कौन से विवरण सूचीबद्ध हैं। उदाहरण के लिए, तो की तरह, लोगों की एक सूची में केवल पहला नाम प्रदर्शित:हैंडलबार्स में ग्लोबल वेरिएबल यदि

<ul> 
{{#each people}} 
    <li> 
     <p>{{firstName}}</p> 
     {{#if displayLastnames}} 
     <p>{{lastName}}</p> 
     {{/if}} 
    </li> 
{{/each}} 
</ul> 

मैं वास्तव में डेटा को संशोधित करने (उदाहरण के लिए, lastName विशेषता को दूर करने और {{#if lastName}} करके) नहीं करना चाहती।

उत्तर

15

तुम भी एक वैश्विक सहायक 'displayLastnames' नाम रजिस्टर और एक करता है, तो उसका उपयोग कर सकते हैं:

Handlebars.registerHelper('displayLastnames', function(block) { 
    return displayLastnames; //just return global variable value 
    }); 

और सिर्फ अपने नमूने में के रूप में उपयोग:

{{#if displayLastnames}} 
    <p>{{lastName}}</p> 
    {{/if}} 
+0

[उदाहरण] (http://jsfiddle.net/Y34b4/5/)। मुझे यह विधि बेहतर पसंद है। धन्यवाद! –

+0

हैंडलबार्स 2.0.0 –

+0

के लिए काम नहीं करता है, यहां तक ​​कि 1.0.0 के लिए भी काम नहीं करता है, '[त्रुटि] टाइप एरर: अपरिभाषित कोई ऑब्जेक्ट नहीं है (' depth0.global_var 'का मूल्यांकन), यह पहेली केवल 1.0.0.beta6 के लिए काम करती है ! –

7

हैंडलबार्स वेरिएबल्स का नाम बदलता है ताकि आप सीधे वैश्विक चर तक पहुंच न सकें।

{{#if_displayLastnames}} 
<p>{{lastName}}</p> 
{{/if_displayLastnames}} 

आप शायद अपने "वैश्विक" चर रखना चाहते हैं: अपने खाके में

Handlebars.registerHelper('if_displayLastnames', function(block) { 
    if(displayLastnames) 
     return block.fn(this); 
    else 
     return block.inverse(this); 
}); 

और उसके बाद: शायद ऐसा करने के लिए सबसे आसान काम अपने स्वयं के सहायक, कुछ इस तरह सरल जोड़ने के लिए है पाठ्यक्रम के अपने नामस्थान में।

डेमो: http://jsfiddle.net/ambiguous/Y34b4/

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