我的文档结构:
"_id" : "p5NXQZd5b5dbMrECW",
"feed_id":"xfsfasfsadfdfafs",
"comments" : [
{
"user" : "fzkhiAArD4mgAAjbL",
"comment" : "First comment",
"commentedAt" : 1422416042795
},
{
"user" : "fzkhiAArD4mgAAjbL",
"comment" : " second comment",
"commentedAt" : 1422416071633
},
{
"user" : "fzkhiAArD4mgAAjbL",
"comment" : " third comment is so longgggggggggggggggggggggggggggggggggggg",
"commentedAt" : 1422416087707
},
.......
....
}
我的代码,最初我使用publish-composite
向用户发送了3条评论Meteor.publishComposite('hub_feed',function(hubid){
return {
find: function() {
return HubFeeds.find({hub_id:hubid});
},
children: [
{
find: function(feed) {
var res=FeedHits.findOne({feed_id:feed._id});
if(res){
if(_.has(res,"comments")){
return FeedHits.find({_id:res._id},{fields: {comments:{$slice: -3}}});
}
}
}
}
]
}
});
我在客户端订阅
Meteor.subscribe("hub_feed")
工作正常,我显示了3条评论。
现在点击事件我想加载更多评论,因此创建了另一个发布功能
Meteor.publish("getExtraFeedComments",function(noOfComments,feedid){
var required=noOfComments+10;
..........
return FeedHits.find({feed_id:feedid},{fields: {comments:{$slice: -required}}});
});
我订阅了此发布功能,当用户点击加载更多评论按钮
'click #loadMoreComments':function(){
var hasComments=FeedHits.findOne({feed_id:this._id});
if(hasComments && _.has(hasComments,"comments")){
var noOfComments=hasComments.comments.length;
var handle=Meteor.subscribe("getExtraFeedComments",noOfComments,this._id);
if(handle.ready()){
console.log('ready');
console.log(FeedHits.find().fetch());
}
}
}
这是我的问题,在控制台中我没有准备好,而且我只得到3条评论。
为什么这个订阅onclick事件无效。
Nte :在发布服务器之前,我已检查过结果。 它显示5条评论,但在客户端它只显示3条评论
...........
......
console.log(FeedHits.find({feed_id:feedid},{fields: {comments:{$slice: -required}}}).fetch())
return FeedHits.find({feed_id:feedid},{fields: {comments:{$slice: -required}}});
修改
带回调函数
Meteor.subscribe("getExtraFeedComments",noOfComments,this._id,function(){
console.log(FeedHits.findOne({feed_id:self._id}));
});
我只得到3个值我没有得到更多的值
答案 0 :(得分:2)
看起来您正在尝试从客户端进行同步调用:
var handle=Meteor.subscribe("getExtraFeedComments",noOfComments,this._id);
在Meteor中,客户端永远不会同步,因此在这种情况下,“句柄”将不会返回您期望的内容。它可能会为空。
为了完成您要执行的操作,您需要在订阅功能中进行回调。
Meteor.subscribe("getExtraFeedComments", function(){ /* sub ready here */})
希望有所帮助。