在Meteor中如何在不订阅所有页面内容的情况下加载页面链接?

时间:2015-12-16 06:47:59

标签: meteor

我想加载指向我网页的所有链接。我做了什么,创建了一个仅包含slugtitle字段的单独订阅。在我的导航中使用此数据并且它有效。但现在我需要在每个页面上订阅所有字段。问题是,它只显示了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}}

解决此冲突的最佳方法是什么,只在该网页的路线中加载网页的所有字段?

1 个答案:

答案 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

如果您更正错误,那么您应该可以使用相同集合(页面)的不同订阅并接收正确的数据。