考虑 Publish/Subscribe 模板之外的规则 (Meteor)
Consider Publish/Subscribe rules outside of templates (Meteor)
我有一个应用程序,其中每个用户都有一个与之关联的计数器对象。用户订阅了相应的计数器。
每次用户提交表单时,我都想将用户计数器的当前值保存到表单中。但是,客户端和服务器在使用什么 Counter 对象上存在分歧。
Counters = new Mongo.Collection("counters");
Router.route('/register', { name: 'insertRegistration',
waitOn: function() {
return [ Meteor.subscribe('counters') ];
},
});
RegistrationSchema = new SimpleSchema({
somevalue: {
type: String,
autoValue: function() {
console.log(Counters.findOne()); // Different results on client and server
return "whatever";
}
}
});
if (Meteor.isServer) {
Meteor.publish('counters', function() {
return Counters.find({ user_id: this.userId });
});
}
客户端上的 Counters.findOne()
选择与当前用户关联的 Counter 对象。
Counters.findOne()
在服务器上从所有 Counter 对象的集合中挑选一个 Counter 对象。
我认为这是因为客户端请求 Counters
并获取其订阅的内容,而服务器请求 Counters
并获取集合。
有没有办法考虑服务器上的 publish/subscribe 规则?
在服务器上,执行
Counter.findOne({ user_id: this.userId })
为用户获取正确的计数器。
我有一个应用程序,其中每个用户都有一个与之关联的计数器对象。用户订阅了相应的计数器。
每次用户提交表单时,我都想将用户计数器的当前值保存到表单中。但是,客户端和服务器在使用什么 Counter 对象上存在分歧。
Counters = new Mongo.Collection("counters");
Router.route('/register', { name: 'insertRegistration',
waitOn: function() {
return [ Meteor.subscribe('counters') ];
},
});
RegistrationSchema = new SimpleSchema({
somevalue: {
type: String,
autoValue: function() {
console.log(Counters.findOne()); // Different results on client and server
return "whatever";
}
}
});
if (Meteor.isServer) {
Meteor.publish('counters', function() {
return Counters.find({ user_id: this.userId });
});
}
客户端上的 Counters.findOne()
选择与当前用户关联的 Counter 对象。
Counters.findOne()
在服务器上从所有 Counter 对象的集合中挑选一个 Counter 对象。
我认为这是因为客户端请求 Counters
并获取其订阅的内容,而服务器请求 Counters
并获取集合。
有没有办法考虑服务器上的 publish/subscribe 规则?
在服务器上,执行
Counter.findOne({ user_id: this.userId })
为用户获取正确的计数器。