2012-08-09 11 views
223

मैं अपने प्रोजेक्ट में टेम्पलेटिंग के लिए हैंडलबार्स का उपयोग कर रहा हूं। हैंडलबार्स में "प्रत्येक" सहायक के वर्तमान पुनरावृत्ति की अनुक्रमणिका प्राप्त करने का कोई तरीका है?प्रत्येक सहायक में हैंडलबार में इंडेक्स कैसे प्राप्त करें?

<tbody> 
    {{#each item}} 
     <tr> 
      <td><!--HOW TO GET ARRAY INDEX HERE?--></td> 
      <td>{{this.key}}</td> 
      <td>{{this.value}}</td> 
     </tr> 
    {{/each}} 
</tbody> 
+1

आप अपनी खुद की सहायक रजिस्टर कर सकते हैं करने के लिए के साथ पैरेंट ऑब्जेक्ट की key उपयोग कर सकते हैं यह, उदाहरण के लिए: https://gist.github.com/1048968 या: http://pastebin.com/ksGrVYkz – stusmith

+1

मैंने गिस्ट उदाहरण के लिए एक और समाधान जोड़ा जो हैंडलबार्स-1.0.rc.1.js के साथ काम करता है। https://gist.github.com/1048968#gistcomment-617934 – mlienau

उत्तर

451

Handlebars सूचकांक (या वस्तु यात्रा के मामले में प्रमुख) के नए संस्करण में मानक प्रत्येक सहायक के साथ डिफ़ॉल्ट रूप से प्रदान की जाती है।


टुकड़ा से: https://github.com/wycats/handlebars.js/issues/250#issuecomment-9514811

वर्तमान सरणी आइटम के सूचकांक उपलब्ध कुछ समय के लिए अब @index के माध्यम से किया गया है:

{{#each array}} 
    {{@index}}: {{this}} 
{{/each}} 

वस्तु यात्रा के लिए, बजाय @key का उपयोग करें:

{{#each object}} 
    {{@key}}: {{this}} 
{{/each}} 
+9

डाउनवोट के लिए खेद है। एक अपवित्र होना चाहिए था, लेकिन जब तक मैंने देखा कि यह बंद कर दिया गया था। – Undistraction

+56

मैंने इसे विभिन्न परिस्थितियों में लागू करने का प्रयास किया है, हर बार मुझे कंसोल पर एक त्रुटि मिलती है। 'अनकॉट सिंटेक्स त्रुटि: अप्रत्याशित टोकन, ' – waltfy

+0

वल्टरकारवाल्हो – dmkc

19

यह एम्बर के नए संस्करणों में बदल गया है।

सरणियों के लिए:

{{#each array}} 
    {{_view.contentIndex}}: {{this}} 
{{/each}} 

ऐसा लगता है कि #each ब्लॉक नहीं रह वस्तुओं पर काम करता है। मेरा सुझाव है कि इसके लिए अपने स्वयं के सहायक कार्य को रोल करें।

इस tip के लिए धन्यवाद।

12

मुझे पता है कि यह बहुत देर हो चुकी है।

जावा स्क्रिप्ट:: लेकिन मैं निम्नलिखित कोड के साथ इस मुद्दे को हल कर

Handlebars.registerHelper('eachData', function(context, options) { 
     var fn = options.fn, inverse = options.inverse, ctx; 
     var ret = ""; 

     if(context && context.length > 0) { 
     for(var i=0, j=context.length; i<j; i++) { 
      ctx = Object.create(context[i]); 
      ctx.index = i; 
      ret = ret + fn(ctx); 
     } 
     } else { 
     ret = inverse(this); 
     } 
     return ret; 
}); 

HTML:

{{#eachData items}} 
{{index}} // You got here start with 0 index 
{{/eachData}} 

अगर आप 1 के साथ अपने प्रारंभ अनुक्रमणिका चाहते आप कोड निम्न करना चाहिए:

जावास्क्रिप्ट:

Handlebars.registerHelper('eachData', function(context, options) { 
     var fn = options.fn, inverse = options.inverse, ctx; 
     var ret = ""; 

     if(context && context.length > 0) { 
     for(var i=0, j=context.length; i<j; i++) { 
      ctx = Object.create(context[i]); 
      ctx.index = i; 
      ret = ret + fn(ctx); 
     } 
     } else { 
     ret = inverse(this); 
     } 
     return ret; 
    }); 

Handlebars.registerHelper("math", function(lvalue, operator, rvalue, options) { 
    lvalue = parseFloat(lvalue); 
    rvalue = parseFloat(rvalue); 

    return { 
     "+": lvalue + rvalue 
    }[operator]; 
}); 

एचटीएमएल:

{{#eachData items}} 
    {{math index "+" 1}} // You got here start with 1 index 
{{/eachData}} 

धन्यवाद।

+0

धन्यवाद, आपने स्पष्ट किया है कि @index 0 से शुरू होता है, और इसे 1 आधारित इंडेक्स में बदलने के लिए एक विधि प्रदान की जाती है। वास्तव में मुझे क्या चाहिए। – Rebs

+0

आपकी मदद करने में खुशी हुई ... :) – Naitik

5

हैंडल संस्करण 3.0 बाद में,

{{#each users as |user userId|}} 
    Id: {{userId}} Name: {{user.name}} 
{{/each}} 

इस विशिष्ट उदाहरण में, उपयोगकर्ता वर्तमान संदर्भ के रूप में एक ही मूल्य है और userId यात्रा के लिए सूचकांक मूल्य होगा। देखें - http://handlebarsjs.com/block_helpers.html ब्लॉक सहायकों खंड में

2

सरणी:

{{#each array}} 
    {{@index}}: {{this}} 
{{/each}} 

आप वस्तुओं की सरणियों है ...

{{#each array}} 
    //each this = { key: value, key: value, ...} 
    {{#each this}} 
     //each [email protected] and value=this of child object 
     {{@key}}: {{this}} 
     //Or get index number of parent array looping 
     {{@../index}} 
    {{/each}} 
{{/each}} 

वस्तुओं: आप बच्चों के माध्यम से पुनरावृति कर सकते हैं

{{#each object}} 
    {{@key}}: {{this}} 
{{/each}} 

आप नेस्ट है वस्तुओं आप {{@../key}}

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