我正在学习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();
});
我认为其他步骤有助于打破反应,但我该如何解决?
答案 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的视频,并阅读客户端上的反应性连接。