我有一个meteor.js应用程序,我试图进行生产。我有一个UserEarnings集合,用于存储"积分"每个用户都赚了。现在,我发布了服务器上的所有记录:
Meteor.publish('userEarnings', () => UserEarnings.find());
将记录过滤到客户端上特定用户的相关记录:
const composer = (props, onData) => {
const subscription = Meteor.subscribe('userEarnings');
if (subscription.ready()) {
const userEarnings = UserEarnings.find({owner: Meteor.user()._id}).fetch();
onData(null, { userEarnings });
}
};
export default composeWithTracker(composer, Loading)(AuthenticatedNavigation);
这非常有效,但理想情况下我会在服务器上过滤:
Meteor.publish('userEarnings', () => UserEarnings.find({ owner: this.userId }));
不幸的是,当我在客户端上调用UserEarnings.find()。fetch()时,这样做不会返回任何结果。有谁知道为什么会这样?请注意,我只订阅' userEarnings'当有登录用户时从客户端。
我不确定是否还有其他相关信息,但如果您认为有,请告诉我。我正在运行Meteor 1.4
答案 0 :(得分:2)
变化:
public Booking GetBooking(..., int numberOfTries) {
while (true)
numberOfTries--;
if (numberOfTries == 0) {
return null;
}
if (allResorcesAreAvailable) {
return new Booking()
}
}
}
为:
Meteor.publish('userEarnings', () => UserEarnings.find({ owner: this.userId }));
第一种方法不起作用的原因是因为通过使用箭头函数,您将发布函数的上下文设置为回调。 Meteor.publish('userEarnings', function userEarnings() {
return UserEarnings.find({ owner: this.userId });
});
需要非箭头功能才能正确设置上下文(并允许您正确使用Meteor.publish
。)