হ্যান্ডলবার্সে প্রতিটি সহায়ককে কীভাবে সূচক পাবেন?


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 বা: পেস্টবিন.
com

1
আমি গিস্ট উদাহরণে আরও একটি সমাধান যুক্ত করেছি যা হ্যান্ডেলবার্স -১.০.সিআর.১.জেএস নিয়ে কাজ করে। gist.github.com/1048968#gistcomment-617934
mlienau

উত্তর:


524

হ্যান্ডলবার্স সূচকের নতুন সংস্করণগুলিতে (বা বস্তুর পুনরাবৃত্তির ক্ষেত্রে কী) মানক প্রতিটি সহায়ক সহ ডিফল্টরূপে সরবরাহ করা হয়।


স্নিপেট থেকে: https://github.com/wycats/handlebars.js/issues/250#issuecomment-9514811

বর্তমান অ্যারে আইটেমের সূচিটি কিছু সময়ের জন্য এখনই পাওয়া গেছে @ ইন্ডেক্সের মাধ্যমে:

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

বস্তুর পুনরাবৃত্তির জন্য, পরিবর্তে @ কী ব্যবহার করুন:

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

57
আমি বিভিন্ন পরিস্থিতিতে এটি প্রয়োগ করার চেষ্টা করেছি, প্রতিবারই কনসোলে ত্রুটি পেয়েছি। Uncaught SyntaxError: Unexpected token ,
ওয়াল্টফাই

1
এটি দুর্দান্ত কাজ করে তবে নিশ্চিত হন যে আপনি যদি @ ওয়েবের কাঠামো ব্যবহার করেন যেখানে @ এর একটি বিশেষ অর্থ রয়েছে :)
অ্যালেক্সজি

7
এটি v1.2.0 হিসাবে লক্ষ্য করার মতো , @indexএবং @firstএখন অবজেক্টগুলিতেও প্রতিটি পুনরাবৃত্তির জন্য সমর্থিত।
WynandB

6
আপনি যদি {{@@index}}
এএসপি. নেট


19

এটি অ্যাম্বারের নতুন সংস্করণগুলিতে পরিবর্তিত হয়েছে।

অ্যারেগুলির জন্য:

{{#each array}}
    {{_view.contentIndex}}: {{this}}
{{/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;
}); 

এইচটিএমএল:

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

আপনি যদি 1 টি দিয়ে সূচকটি শুরু করতে চান তবে আপনার নিম্নলিখিত কোডগুলি করা উচিত:

javascript:

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}}

ধন্যবাদ।


1
ধন্যবাদ, আপনি স্পষ্ট করেছিলেন যে @ সূচক 0 থেকে শুরু হয় এবং এটি 1 ভিত্তিক সূচীতে পরিবর্তন করার জন্য একটি পদ্ধতি সরবরাহ করেছিল। ঠিক আমার যা প্রয়োজন ছিল।
Rebs

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}}


আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.