2015-08-11 2 views
2

У меня есть две коллекции:Метеор расслоение плотной - Шаблон: несколько коллекций

  • Сообщений: {_id: "123", текст: "Какой-то текст", user_id: "456"}
  • закладки: {_ID : «456», post_id: «123», user_id: «425»}

В коллекции закладок post_id является _id из закладки.

Я использую следующий вспомогательный шаблон для отображения всех сообщений от конкретного пользователя:

Template.profile.helpers({ 
    posts: function() { 

// get current router parameter id (iron router) 
    context = Router.current().params._id; 

    return Posts.find({user_id: context}, {sort: {timestamp: -1} }); 
} 
}); 

Теперь я хотел бы, чтобы отобразить все сообщения пользователя закладок в шаблоне: userBookmarks. Можно ли добиться этого с помощью шаблонного помощника? Или только с пакетом или вариантом преобразования Mongo.Collection?

ответ

2

HTML:

<template name="userBookmarks"> 
    {{#each myBookmarks}} 
    {{#with post}} 
     {{text}} 
    {{/with}} 
    {{/each}} 
</template> 

ЯШ:

Template.userBookmarks.helpers({ 
    myBookmarks: function(){ 
    return Bookmarks.find({user_id: Meteor.userId()}); 
    }, 
    post: function(){ 
    return Posts.findOne({_id: this.post_id}); 
    } 
}); 
0

Если вам нужна версия один-хелперов:

Template.userBookmarks.helpers({ 
    'posts': function() { 
    return Posts.find({ 
     _id: { 
     $in: Bookmarks.find({user_id: Meteor.userId()}).map(function (bookmark) { 
      return bookmark.post_id; 
     }) 
     } 
    }); 
    } 
}); 
+0

Оба работают отлично! Спасибо: @MichelFloyd – mrdev

+0

Да, версия @ MichelFloyd заканчивает тем, что делает больше запросов, но выглядит намного приятнее, чем мой кудрявый суп из брекетов. Также он может работать лучше реагировать. – SylvainB

Смежные вопросы