订阅点击事件不起作用

时间:2015-01-28 05:50:45

标签: meteor

我的文档结构:

"_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个值我没有得到更多的值

1 个答案:

答案 0 :(得分:2)

看起来您正在尝试从客户端进行同步调用:

var handle=Meteor.subscribe("getExtraFeedComments",noOfComments,this._id);

在Meteor中,客户端永远不会同步,因此在这种情况下,“句柄”将不会返回您期望的内容。它可能会为空。

为了完成您要执行的操作,您需要在订阅功能中进行回调。

Meteor.subscribe("getExtraFeedComments", function(){ /* sub ready here */})

希望有所帮助。