为什么我发布的数据不被反应?

时间:2015-09-28 22:12:14

标签: meteor

我正在学习Meteor,我想知道为什么我的数据在发布时没有被动反应如下:

Meteor.publish("users", function (userId) {
    // teams the user is member of
    var teams = _.pluck(Teams.find({members:userId}).fetch(), '_id');
    // users from all those teams
    var userIds = _.union.apply(_,_.pluck(Teams.find({_id:{$in:teams}}).fetch(), 'members'));
    // user cursor
    return Meteor.users.find({_id:{$in:userIds}},{fields: {_id:1, profile: 1, emails:1}});
});

显然,这可行[

]

Meteor.publish("users", function (userId) {
    return Meteor.users.find();
});

我认为其他步骤有助于打破反应,但我该如何解决?

1 个答案:

答案 0 :(得分:2)

Meteor.publish()

返回的游标只有反应性

因此在返回函数中,Meteor仅观察Meteor.users.find游标。这是线......

return Meteor.users.find({_id:{$in:userIds}},{fields: {_id:1, profile: 1, emails:1}});

除非再次运行发布,否则此查询中的数组userIds将保持相同的值。

当新的userId传递给发布时,将再次运行发布。运行Teams.find查询并保存新值。但是这个查询的结果保存在变量 - teams中。该变量是非反应性的,因此,从发布返回的游标不认为它应该再次运行。

第一次发布该出版物,您将获得结果。但是当它再次运行时,游标将不会查询数据库。

我建议在Observe in a Publish Function上观看Chris Mather的视频,并阅读客户端上的反应性连接。