Meteor.publish("ships_snapshots", function(user, options) {
if(!this.userId) return null;
if(this.userId) {
console.log('subsribed by ' + user);
return ships_snapshots.find({userId: user}, options);
}
});
Meteor.publish("ships_snapshots_all", function() {
return ships_snapshots.find({});
})
我的subscribe.js(在lib文件夹中):
Meteor.subscribe('ships_snapshots');
Meteor.subscribe('ships_snapshots_all');
问题100%在我的subription中,因为如果我正在安装autopublish所有工作正常。我认为我的路由器存在问题。
router.js:
Router.route('/ships/details', {
name: 'ship.details',
loadingTemplate: 'loading',
onBeforeAction: function() {
var shipId = Session.get('currentShipId');
if(!shipId) {
Router.go('user.ships');
} else {
this.next();
}
},
waitOn: function() {
if (Meteor.isClient) {
var getCompare = Meteor.user().profile.wows.compareWith;
console.log(getCompare);
var user2 = Meteor.users.findOne({"profile.wows.nickname": getCompare});
var user2Id = user2._id;
if (getCompare) {
var user2 = Meteor.users.findOne({"profile.wows.nickname": getCompare});
if (user2) {
var user2Id = user2._id;
}
}
if (getCompare) {
var handle = Meteor.subscribe('ships_snapshots', Meteor.user()._id) && Meteor.subscribe('ships_snapshots', user2Id) && Meteor.subscribe('userSearchInfo', getCompare);
Session.set('compareWith', user2);
console.log('user2 _____');
console.log(user2);
return handle
} else {
var handle = Meteor.subscribe('ships_snapshots', Meteor.user()._id) && Meteor.subscribe('ships_snapshots', user2Id);
return handle
}
}, data: function() {
if (handle.ready()) {
var shipname = this.params.shipName;
var obj = {};
var query = ships.findOne();
var shipId = Session.get('currentShipId');
var result;
_.each(Meteor.user().profile.wows.ships, function(row) {
if (row.ship_id === shipId) {
result = row;
}
});
return result;
}
}
});
我认为我在订阅ship_snapshots时遇到了问题。这里出了点问题,但我无法解决这个问题。
答案 0 :(得分:1)
Meteor.publish("ships_snapshots", function(user, options) {
if(!this.userId) return null;
if(this.userId) {
console.log('subsribed by ' + user);
return ships_snapshots.find({userId: user._id}, options);
}
});
在您的发布脚本中,用户真的是id还是用户对象?我把它改成了user._id。请检查一下。
答案 1 :(得分:1)
你究竟是什么意思"没有工作"?从您的代码中我会假设您总是看到所有的快照。
如果您在路由器中拥有订阅,则不应该在/ lib中拥有订阅。如果您在/ lib中有Meteor.subscribe('ships_snapshots_all');
,那么您应该始终看到所有的快照(假设您并未在任何地方停止该订阅)。
此外,您对所有人的订阅应该是:
Meteor.publish("ships_snapshots", function(user, options) {
if(this.userId) {
console.log('subsribed by ' + user);
return ships_snapshots.find({userId: user}, options);
} else this.ready();
});
如果没有用户,您不想返回null,只需将订阅标记为就绪而不查找任何记录。这不是问题的原因,而只是良好的做法。