Meteor if helper - 如何在每个循环中访问此数据

时间:2016-05-16 18:17:48

标签: if-statement meteor this helper datacontext

我想给用户一个按钮,用于将文档的ID从一个集合(及其组名)添加到另一个集合中。

我有一个#each循环,它通过模板助手查询返回第一个集合中的每个文档。在每个返回的文档中,我需要检查id是否已添加到其他集合中,并且根据结果,html中的#if帮助器返回不同的输出。

但是“this”返回一个空对象,我不知道如何将每个“this”数据上下文传递给“inCollectionTwo”帮助器:

<template name="Collections">
  {{#each doc in colOne}}   
    {{#if inCollection2}}
      {{> rmvfrmcolTwo doc=doc}}
    {{else}}
      {{> addtocolTwo doc=doc}}
    {{/if}}
  {{/each}
</template>

助手

Template.Collections.helpers({
  colOne: function() {
    return CollectionOne.find();
  },

  inCollectionTwo: function(){
    var docid = this.colOne._id;
    var group = Meteor.user().profile.groupName;
    var exists = CollectionTwo.findOne({documentid: docid, groups: { "$in": [group]}});
    if(exists) {
      return true;
    } else {
      return false;
    }
  }
});

1 个答案:

答案 0 :(得分:1)

由于您使用的是each..in,因此您每次迭代都会将该块的整个数据上下文更改为文档。现在可以使用事件处理程序和帮助程序中的this关键字引用该文档。

{{#each doc in colOne}}
  {{#if inCollectionTwo)}}
    {{> rmvfrmcolTwo doc=doc}}
  {{else}}
    {{> addtocolTwo doc=doc}}
  {{/if}}
{{/each}}

在你的帮手中:

Template.Collections.helpers({
  //...
  inCollectionTwo: function() {
    // `this` is the `doc` from the #each block in your template
    var docid = this._id;

    //...
  }
}

编辑或者,您可以将新上下文作为参数传递给助手

{{#each doc in colOne}}
  {{#if (inCollectionTwo doc)}}
  ...

并在你的助手

inCollectionTwo: function( doc ) {
  var docid = doc._id;
  //...
}

流星指南有关于Blaze和each..in循环的detailed section here。还有其他一些方法可以解决你的问题,但这应该可以让你开始。