流星出版和订阅无效

时间:2015-06-17 15:45:53

标签: javascript mongodb meteor publish subscription

我正在制作一个管理页面,其中显示了用户orders的列表。出于某种原因,发布功能没有从我的订阅功能接收用户的ID作为参数。

我的user对象包含以下属性:

_id
userId
confirmed

我的orders对象包含以下属性:

_id
userId
amount
date

我的出版物:

Meteor.publish('clientOrders', function(userId) {
    console.log('user is ' + userId);
    return Order.find({_id: userId});
});

我的订阅:

viewClientOrders = RouteController.extend({
    loadingTemplate: 'loading',
    waitOn: function () { 
    Meteor.subscribe('clientOrders', this.params._id);
},
action: function() {
    this.render('viewClientOrders');
}

});

我的路线:

Router.route('/viewClientOrders/:id', {name: 'viewClientOrders', controller: 'viewClientOrders', onBeforeAction: requireLogin});

我为userId做了一个console.log,它返回null,虽然我在我的订阅功能中明确地传递了一个userId参数(this.params._id)。但是,如果我传递参数3,出于测试目的,它将起作用。此外,我使用类似的发布/订阅方法来查看客户端的配置文件,传递完全相同的参数,它工作正常......

任何人都知道发生了什么?谢谢!

1 个答案:

答案 0 :(得分:0)

确保return中的waitOn。 Iron Router只有在知道订阅准备就绪后才会进行渲染:

viewClientOrders = RouteController.extend({
    waitOn: function () { 
        return Meteor.subscribe('clientOrders', this.params._id);
    }
    ...

确保您还设置了loadingTemplatedocs)。