我试图闯入流星。这是我在我的一个模板中的帮手:
genres: function() {
return Genres.find();
}
返回的内容如下:
[{ "name" : "Action", "_id" : "CHP8uaSPNwKTj6gn7" },
{ "name" : "Thriller", "_id" : "8hKRp3LmgcD6gPRXf" }]
我在同一个模板中还有另一个辅助函数:
authors: function() {
return Authors.find();
}
返回的内容如下:
[{ "name" : "Robert Ludlum", "genre" : [ "CHP8uaSPNwKTj6gn7", "8hKRp3LmgcD6gPRXf" ]}]
当我想用HTML显示作者及其类型时,问题就变得清晰了:
{{#each authors}}
<p> Author: {{name}} </p>
<p> Genres: {{genre}} </p>
{{/each}}
正如您已经猜到的那样,导致:
Author: Robert Ludlum
Genres: CHP8uaSPNwKTj6gn7, 8hKRp3LmgcD6gPRXf
这是不可取的。这会更好:
Author: Robert Ludlum
Genres: Action, Thriller
我很难搞清楚如何实现这一目标。我没有很多关于这个NoSQL的经验,而且我所看到的例子在这种情况下无益。
那我该如何解决这个问题呢?
答案 0 :(得分:1)
有几种方法可以解决这个问题。一个是添加一个帮手,如:
Template.myTemplate.helpers({
genreNames: function() {
var genres = Genres.find({_id: {$in: this.genre}}).fetch();
var names = _.pluck(genres, 'name');
return names.join(', ');
}
});
将模板修改为如下所示:
{{#each authors}}
<p> Author: {{name}} </p>
<p> Genres: {{genreNames}} </p>
{{/each}}
帮助程序有效,因为它在#each
内部运行,所以它的上下文是作者。
或者,您可以在收藏中添加transform或使用collection-helpers。这样,您就可以向所有作者实例添加虚拟属性,因此您可以执行以下操作:Authors.findOne().genreNames()
。
答案 1 :(得分:0)
在大气层中有一个名为publish-composite
,https://atmospherejs.com/reywood/publish-composite的包,可以让你做你想做的事。
它允许您使用主要集合和其他集合中的相关数据选择多个集合。