11

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.

Community
  • 1
  • 1
hyde
  • 111
  • 1
  • 4
  • 1
    I think that's it. What is the question exactly? – Tom Coleman Dec 04 '12 at 01:43
  • thanks for your comment. I posted this question is because I don't have confidence for my code and cannot find meteor sample code for this purpose. I want to know if anyone knows more clever implementation. – hyde Dec 04 '12 at 05:43
  • 1
    Here is better way, no need registerHelper as above, following syntax can work: Template.example.myHelper = function(outItem, inItem){ /* can access outerCollection item via outItem */ }; – hyde Dec 06 '12 at 14:44
  • This might also help: [http://stackoverflow.com/questions/13789622/accessing-parent-context-in-meteor-templates-and-template-helpers/13851721#13851721][1] [1]: http://stackoverflow.com/questions/13789622/accessing-parent-context-in-meteor-templates-and-template-helpers/13851721#13851721 – zorlak Dec 14 '12 at 00:58

2 Answers2

12

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

David Glasser
  • 1,438
  • 13
  • 21
2

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.

Ankur Soni
  • 5,725
  • 5
  • 50
  • 81