2012-08-12 9 views
62

का उपयोग कर मूल "फॉर" लूप पर इटरेटिंग मैं हैंडलबार्स.जेएस के लिए नया हूं और बस इसका उपयोग करना शुरू कर दिया। अधिकांश उदाहरण किसी ऑब्जेक्ट पर पुनरावृत्ति पर आधारित होते हैं। मैं जानना चाहता था कि लूप के लिए बुनियादी में हैंडलबार्स का उपयोग कैसे करें।हैंडलबर्स.जेएस

उदाहरण।

for(i=0 ; i<100 ; i++) { 
    create li's with i as the value 
} 

यह कैसे प्राप्त किया जा सकता है?

उत्तर

141

इसके लिए हैंडलबार में कुछ भी नहीं है लेकिन आप अपने स्वयं के सहायक आसानी से पर्याप्त जोड़ सकते हैं।

अगर तुम सिर्फ कुछ करना तो n बार करना चाहता था:

Handlebars.registerHelper('times', function(n, block) { 
    var accum = ''; 
    for(var i = 0; i < n; ++i) 
     accum += block.fn(i); 
    return accum; 
}); 

और

{{#times 10}} 
    <span>{{this}}</span> 
{{/times}} 

तो आप एक पूरे for(;;) पाश, तो कुछ इस तरह थे:

Handlebars.registerHelper('for', function(from, to, incr, block) { 
    var accum = ''; 
    for(var i = from; i < to; i += incr) 
     accum += block.fn(i); 
    return accum; 
}); 

और

{{#for 0 10 2}} 
    <span>{{this}}</span> 
{{/for}} 

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

+1

सहायकों के लिए +1 इस्तेमाल कर सकते हैं पिछले/पहले/सूचकांक उपयोग करना चाहते हैं। एक साइड नोट के रूप में, सहायक के लिए घोंसले करना उन परिदृश्यों में काम नहीं करेगा जहां आपको प्रारंभिक डेटा को वापस संदर्भित करने की आवश्यकता है। यानी डेटा: {पंक्तियां: 12, कोल्स: 3}। – backdesk

+0

@ mu-is-too-short यहां कोई मदद नहीं है? http://stackoverflow.com/questions/28865379/handlebar-helper-syntax-in-ember-cli – sheriffderek

+0

@ शेरिफडेरेक क्षमा करें, मुझे चीजों की एम्बर या एम्बर-सीएलआई पक्ष नहीं पता है। –

7

यदि आप CoffeeScript

Handlebars.registerHelper "times", (n, block) -> 
    (block.fn(i) for i in [0...n]).join("") 

और

{{#times 10}} 
    <span>{{this}}</span> 
{{/times}} 
4

यह स्निपेट मामले n में और ब्लॉक की देखभाल के रूप में एक गतिशील मान आता है, और @index प्रदान की तरह वैकल्पिक संदर्भ चर, यह निष्पादन के बाहरी संदर्भ भी रखेगा।

/* 
* Repeat given markup with given times 
* provides @index for the repeated iteraction 
*/ 
Handlebars.registerHelper("repeat", function (times, opts) { 
    var out = ""; 
    var i; 
    var data = {}; 

    if (times) { 
     for (i = 0; i < times; i += 1) { 
      data.index = i; 
      out += opts.fn(this, { 
       data: data 
      }); 
     } 
    } else { 

     out = opts.inverse(this); 
    } 

    return out; 
}); 
+0

मुझे यह दृष्टिकोण बेहतर लगता है क्योंकि आपके पास @index चर है। इसके अलावा आप विशिष्ट आवश्यकताओं के आधार पर आसानी से अन्य चर जोड़ सकते हैं। – ChrisRich

10

शीर्ष जवाब यहाँ अच्छा है, आप ही आप निम्नलिखित

Handlebars.registerHelper('times', function(n, block) { 
    var accum = ''; 
    for(var i = 0; i < n; ++i) { 
     block.data.index = i; 
     block.data.first = i === 0; 
     block.data.last = i === (n - 1); 
     accum += block.fn(this); 
    } 
    return accum; 
}); 

और

{{#times 10}} 
    <span> {{@first}} {{@index}} {{@last}}</span> 
{{/times}} 
+0

हेल्पर के नेस्टेड उपयोगों पर आने पर यह सहायक @ ../अनुक्रमणिका या @ ../आखिरी बार उपयोग करने की अनुमति नहीं देता है। क्या यह सही है या शायद मैंने कुछ गलत किया? – madtyn