प्रत्येक हेल्पर को हैंडलबार्स में सूचकांक कैसे प्राप्त करें?


267

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

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

1
आप ऐसा करने के लिए अपना स्वयं का सहायक पंजीकृत कर सकते हैं, उदाहरण के लिए: gist.github.com/1048968 या: pastebin.com/ksGrVYkz
stusmith

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

जवाबों:


524

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


स्निपेट से: https://github.com/wycats/handlebars.js/issues/250#issuecomment-9514811

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

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

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

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

57
मैंने विभिन्न स्थितियों में इसे लागू करने की कोशिश की है, हर बार मुझे कंसोल पर एक त्रुटि मिलती है। Uncaught SyntaxError: Unexpected token ,
Waltfy

1
यह ठीक काम करता है, लेकिन सुनिश्चित करें कि यदि आप वेब फ्रेमवर्क का उपयोग करते हैं तो '@' अक्षर बच जाता है, जहां @ का एक विशेष अर्थ है :)
एलेक्सजॉन

7
यह ध्यान देने योग्य है कि v1.2.0 के रूप में , @indexऔर @firstअब वस्तुओं पर भी प्रत्येक पुनरावृत्ति के लिए समर्थित हैं।
WynandB

6
आप ASP.Net MVC उस्तरा उपयोग कर रहे हैं आप, साथ @@ बचने यानी{{@@index}}
Masty


19

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

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

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

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

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


14

मुझे पता है कि यह बहुत देर हो चुकी है। लेकिन मैंने निम्नलिखित कोड के साथ इस मुद्दे को हल किया:

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

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];
});

HTML:

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

धन्यवाद।


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

14

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

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

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


7

सरणी:

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

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

{{#each array}}
    //each this = { key: value, key: value, ...}
    {{#each this}}
        //each key=@key 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मूल ऑब्जेक्ट तक पहुंच सकते हैं{{@../key}}


हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.