在Helper函数中使用for循环的正确方法MeteorJS

时间:2015-01-15 03:03:13

标签: javascript meteor

我有helper function

Template.myTemplate.helpers({
listaPerfilUsuarioLikesPeligro:function(){   
    var findLike = LikesPost.find({authorId:Meteor.userId()}).fetch(); 
     for(var i = 0;i<findLike.length;i++){
           console.log(findLike[i].postId)
           console.log(findLike[i].author)
           var findLook = Peligro.find({_id:findLike[i].postId}).fetch();
           console.log(findLook)
           return Peligro.find({_id:findLike[i].postId}).fetch();
      }
  }
});

所以首先我在我的LikesPost集合上进行查找,它工作得非常好,并返回两个对象。现在我尝试使用for循环,对'Peligro'集合进行查找,但它只是将一个对象返回到html模板。

html看起来像这样:

{{#each listaPerfilUsuarioLikesPeligro}}
  Nombre de Mascota {{metadata.tipoDeAnimalPeligro}}<br>
{{/each}}

第二个`console.log'返回id,他也写了2次。

此外,如果我在for循环中更改return语句中的索引,它将返回数组中的第二个对象:

return Peligro.find({_id:findLike[1].postId}).fetch();

这就是我的控制台的外观:

ZW5TFWiAzCBgoTvn4
 ethan
[FS.File]
MnEEb8bhaNFyLPhpe
 ethan
[FS.File]

这是完成此任务的正确方法吗?

1 个答案:

答案 0 :(得分:1)

你的for循环中有一个return。当然,你的助手不会返回findLike中每个对象的结果,而只返回第一个对象的结果。

也许这就是你想要的?

Template.myTemplate.helpers({                                                   
    listaPerfilUsuarioLikesPeligro:function(){                                  
        var findLike = LikesPost.find({authorId:Meteor.userId()}).fetch();      
        var rtv = [];                                                           
        for(var i = 0;i<findLike.length;i++){                                   
            console.log(findLike[i].postId)                                     
            console.log(findLike[i].author)                                     
            var findLook = Peligro.find({_id:findLike[i].postId}).fetch();      
            console.log(findLook)                                               
            rtv = rtv.concat(Peligro.find({_id:findLike[i].postId}).fetch());   
        }                                                                       
        return rtv;                                                             
    }                                                                           
});