2016-08-05 76 views
0

这里在使用_.map是我的助手,从两个集合流星,加入收藏

Template.Lirescategorie.helpers({ 
    scategories: function() { 
     var cursor = Scategories.find(); 
     var data = []; 
     cursor.forEach(function(somewhat) { 
      var categories = Categories.findOne({_id : somewhat.categorieID}, {categorie:1}); 
      data.push({cat : categories.categorie, scat : somewhat.scategorie }); 
     }); 
     return data; 
    } 

}); 

这里是我的收藏diplay数据

categorie : 
{ 
    "_id": "LBKZQfZZSf4DRdeXo", 
    "categorie": "Citoyenneté" 
} 
scategorie 
{ 
    "_id": "cNHYpAEvC9ffjWkf5", 
    "categorieID": "LBKZQfZZSf4DRdeXo", 
    "scategorie": "Etat-Civil" 
} 

我敢肯定,我的助手代码不是最佳的。我想通过使用_.map或类似的东西,我可以减少代码。 因为我不是很熟悉它,我正在寻找这方面的帮助。

+0

什么是你的问题? – TyrionGraphiste

+0

我想使用_.map,或类似forEach的插图 –

回答

0

欢迎来到客户端加入。您可以使用.map()获得的categorieID是清单,并与$in:做第二次发现一气呵成:

var cursor = Scategories.find(); 
var arrayOfCategorieIDs = cursor.map(function(s){return s.categorieId}); 
var categories = Categories.find({_id : {$in: arrayOfCategorieIDs}}); 

然后:

var sCategories = cursor.map(function(s){return s.scategorie}); // array of scategorie names 
var categoryNames = categories.map(function(c){return s.categorie}); // array of categorie names 

Then assemble these two arrays of strings into the array of objects you're looking for. 

但有一个客户端加入一个简单得多的方式:只需遍历一个游标并在帮助程序中查找相关集合。例如:

HTML:

{{#each sCategories}} 
    {{sCategorie}} 
    {{categorie}} 
{{/each}} 

JS:

Lirescategorie.helpers({ 
    sCategories:(){ 
    return Scategories.find(); 
    }, 
    categorie:(){ 
    return Categories.findOne(this.categorieID).categorie; 
    } 
});