Search code examples
javascriptmongodbmeteorspacebarsmeteor-helper

Meteor Templates helpers and access to collections' fields


I have two collections:

Group = {
  users: [Array_of_User]
}

User = {
  name: _string_
}

I'm listing groups ans I'm trying to know in the template if a user is in the groups:

mytemplate.js

Template.mytemplate.helpers({
  groups: function(){
      return Groups.find();
  },
  currentUsername: 'test'
});

mytemplate.html

<template name="main">
  <ul>
    {{#each groups}}
    <li>
      {{#if [the group contains currentUsername] }}
      contains
      {{else}}
      doesn't contain
      {{/if}}
    </li>
    {{/each}}
  </ul>
</template>

The question is: what can I put on the helpers and instead of [the group contains currentUsername] to make it work?

Also, I'm not saying this is the way to do it. I'm open to any suggestions even if it means I have to change a lot.


Solution

  • Within your each block, your data context becomes the current group that is being iterated over. Therefore you can write a helper method that references that current data context like this:

    userInGroup: function(username) {
      var userInGroup;
      this.forEach(function(groupUsername) {
        if (username == groupUsername) {
          userInGroup = true;
        }
      };
      return userInGroup;
    }
    

    'this' within the userInGroup template helper references the current group as long as you use the helper within an a group iteration.

    You can then use the helper like this:

    <template name="main">
      <ul>
        {{#each groups}}
        <li>
          {{#if userInGroup currentUsername}}
          contains
          {{else}}
          doesn't contain
          {{/if}}
        </li>
        {{/each}}
      </ul>
    </template>