hyde
hyde

Reputation: 111

How to access outer {{#each}} collection value in the nested loop

What is the standard way to access outer #each collection values in the loop? for example:

<template name="example">
  {{#each outerCollection}}
  <tr>
    {{#each innerCollection}}
      <td>{{aaa}}</td>
    {{/each}}
  </tr>
  {{/each}}
</template>

Template.example.aaa = function(){
  // cannot access outerCollection values
}

in above Template.example.aaa, this points to the inner collection.

I cannot find way to access outerCollection items. My solution is like below, I am defining my own helper function. Is it a standard Meteor way to achieve this purpose?

<template name="example">
  {{#each outerCollection}}
  <tr>
    {{#each innerCollection}}
      <td>{{myHelper ../outerItem innerItem}}</td>
    {{/each}}
  </tr>
  {{/each}}
</template>

Handlebars.registerHelper('myHelper', function (outItem, inItem) {
  // can access outerCollection via outerItem
});

I found a similar question for the case of inner event handler access.

Upvotes: 11

Views: 4733

Answers (2)

Ankur Soni
Ankur Soni

Reputation: 6018

You can use below code to fetch outer collections.

suppose you have collection called as Collection.Customer and Collection.RechargePlan and you are using both in a template for updating Customer.

Customer = {"name":"James", "rechargeplan":"monthly"};
RechargePlan = [{"rechargeplan": "monthly"},{"rechargeplan": "yearly"}];

 //Inside template, Bydefault Customer is available.
{{#each RechargePlan}}
  {{#if equals ../rechargeplan rechargeplan}}
      //Hurray Plan matches
  {{/if}}
{{/each}}

In above code, ../rechargeplan is actually Customer.rechargeplan, ../ actually went one step above heirarchy and then accessed the field if available, since Customer is already available to template, it's field is picked up.

Upvotes: 2

David Glasser
David Glasser

Reputation: 1468

I think you've answered this yourself! Using ../ is documented in https://github.com/meteor/meteor/wiki/Handlebars.

Upvotes: 12

Related Questions