我尝试使用reywood:publish-composite
。但是,由于我想加载文章数据和指定的文献资料,我做错了。
我认为我的主要问题是正确设置路由以将数据输入变量,我可以在模板中使用。
我会打开/article/BpsCfbhZuoXfEvREG
:
publications.js
Meteor.publishComposite('articles', function(){
return {
find: function(){
return Articles.find();
},
children: [{
find: function(article){
return Literature.find({'article.detail.reference': article._id})
}
}]
}
});
router.js
Router.route('/article/:_id', {
name: 'article',
waitOn: function() {
return Meteor.subscribe('articles'); /* correct? */
},
data: function () {
return {
article: Articles.findOne({
_id: this.params._id
}),
references: Literature.find({}) /* guess, this is wrong */
};
}
});
文学有这种结构,我正在寻找reference
:
{
"_id" : "YAEYvJ7tvXxTvnFtv",
"article" : [
{
"title" : "Article 1",
"detail" : [
{
"reference" : "BpsCfbhZuoXfEvREG",
"year" : 2000,
}
]
}
]
}
答案 0 :(得分:0)
您想要加载单个文章吗?这看起来像你在做什么,但你订阅所有文章。您可以将参数传递给订阅。
waitOn: function () {
return Meteor.subscribe('article', this.params._id);
}
其次,由于您的文献是一系列对象,因此您应该使用$elemMatch
Meteor.publishComposite('article', function (articleId) {
check(articleId, String);
return {
find: function () {
return Articles.find(articleId);
},
children: [{
find: function (article) {
return Literature.find({
'article.detail': {
$elemMatch: {
'reference': article._id
}
}
});
}
}]
}
});