我想加载指向我网页的所有链接。我做了什么,创建了一个仅包含slug
和title
字段的单独订阅。在我的导航中使用此数据并且它有效。但现在我需要在每个页面上订阅所有字段。问题是,它只显示了slug和title字段。我认为这两个订阅是冲突的。这是我的订阅:
Meteor.publish("pageLinks", function() {
return Pages.find({}, {
fields: {
title: 1,
slug: 1
}
});
});
Meteor.publish("page", function(slug) {
check(slug, String);
return Pages.findOne({
slug: slug
});
});
我在单页路线中的订阅:
FlowRouter.route('/page/:slug', {
name: 'pageSingle',
subscriptions: function(params, queryParams) {
this.register('page', Meteor.subscribe('page', params.slug));
},
action() {
BlazeLayout.render('panelLayout', {
content: 'pageSingle'
});
setTitle('Page');
}
});
对于链接,我在模板中订阅了这样的内容:
Template.panelLinks.onCreated(function() {
this.autorun(function() {
Meteor.subscribe('pageLinks');
});
});
Template.panelLinks.helpers({
pageLinks: function() {
return Pages.find({});
}
});
以下是我显示链接的方式:
{{#each pageLinks}}
{{> pageLink}}
{{/each}}
解决此冲突的最佳方法是什么,只在该网页的路线中加载网页的所有字段?
答案 0 :(得分:1)
首先,您的发布功能有误:
Meteor.publish("page", function(slug) {
check(slug, String);
return Pages.findOne({
slug: slug
});
});
您应该在控制台错误中看到:
Error: Publish function can only return a Cursor or an array of Cursors
将Pages.findOne
替换为Pages.find
如果您更正错误,那么您应该可以使用相同集合(页面)的不同订阅并接收正确的数据。