想象一个网站列出了不同的文章与不同的主题,您作为用户可以标记您喜欢的文章以便稍后阅读。收藏的文章会保存并显示在本网站的个人小空间中,如下所示:
影
科学
哲学
Etc等。
我已使用以下字段保存数据库中的每篇文章:
{
articleName: "Upcoming summer blockbusters",
subject: "Movies",
link: //link to the article
}
然后,当用户收藏一个时,我只需将其复制到数据库中的自己的集合中。
然后是问题......
我可以遍历他的文章并在他的用户页面上打印出来,如下所示:
<ul>
{{#each articles}}
<heading>{{subject}}</heading> //how do I avoid duplicates?
<li>{{articleName}}</li>
{{/each}}
</ul>
但是,这会复制多篇文章共享的主题。
我只能遍历主题(例如,将它们变成一个检查重复项的数组)并打印出来:
<ul>
{{#each subjects}}
<heading>{{this}}</heading>
<li>{{../articleName}}</li> //how do I print the correct one?
{{/each}}
</ul>
但这种方式会被完全打破,因为文章不会出现在正确的主题标题下......
我该怎么办?
答案 0 :(得分:1)
实际上我认为你应该只存储喜欢的文章,就像你那样。处理文章删除等案例会更简单。只需在辅助函数中解析文章,您就会得到相同的结果:
favArticlesBySubjects: function () {
var favArticles = Meteor.user().profile.favArticles;
var articlesBySubject = [];
favArticles.forEach(function (article) {
var index = _.findIndex(articlesBySubject, function (obj) {
return obj.subject === article.subject;
});
if (index < 0)
articlesBySubject.push({subject: article.subject, articles:[article]});
else
articlesBySubject[index].articles.push(article);
};
return articlesBySubject;
}
这样,您可以使用以下方式显示您喜欢的文章:
{{#each favArticlesBySubjects}}
<heading>{{subject}}</heading>
<ul>
{{#each articles}}
<li>{{articleName}}</li>
{{/each}}
</ul>
{{/each}}