2012-09-12 72 views
1

我複製代碼來自:How does the messages-count example in Meteor docs work?它不起作用。客戶端調用Counts.find().count()方法,我期望它輸出1但結果是0,你能告訴我爲什麼嗎?如何訂閱Meteor的發佈集?

//server code 
if (Meteor.is_server) 
{ 
    Meteor.startup(function(){ 
     console.log("server is startup..."); 
     Messages = new Meteor.Collection("messages"); 
     if(Messages.find().count() == 0){ 
     for(var i=0;i<7;i++){ 
     Messages.insert({room_id:"00"+i,text:"message "+i}); 
     } 
    } 
    console.log("room_id:001 messages count="+Messages.find({room_id:"001"}).count()); 
    //print--->room_id:001 messages count=1 (it's ok) 

    Meteor.publish("counts-by-room", function (roomId) { 
     var self = this; 
     var uuid = Meteor.uuid(); 
     var count = 0; 

     var handle = Messages.find({room_id: roomId}).observe({ 
     added: function (doc, idx) { 
     count++; 
     self.set("counts", uuid, {roomId: roomId, count: count}); 
     self.flush(); 
     }, 
     removed: function (doc, idx) { 
     count--; 
     self.set("counts", uuid, {roomId: roomId, count: count}); 
     self.flush(); 
    } 
    // don't care about moved or changed 
    }); 
    // remove data and turn off observe when client unsubs 
    self.onStop(function() { 
     handle.stop(); 
     self.unset("counts", uuid, ["roomId", "count"]); 
     self.flush(); 
    }); 
    }); 
    }); 
} 

//client code 
if (Meteor.is_client) 
{ 
    Meteor.startup(function() { 
     Counts = new Meteor.Collection("counts"); 
     Session.set("roomId","001"); 
     Meteor.autosubscribe(function() { 
     Meteor.subscribe("counts-by-room", Session.get("roomId")); 
    }); 
    console.log("I client,Current room "+Session.get("roomId")+" has " 
    + Counts.find().count() + " messages."); 
    //print--->I client,Current room 001 has 0 messages.(trouble:I expect it to output "...has 1 messages" here) 
    }); 
} 

回答

1

我嘗試了很多次,我找到了這個錯誤。 將客戶端代碼更改爲如下所示,它將打印出正確的結果。

//client code 
Meteor.startup(function() { 
    Counts = new Meteor.Collection("counts"); 
    Session.set("roomId","001"); 
    Meteor.autosubscribe(function() { 
    Meteor.subscribe("counts-by-room", Session.get("roomId")); 
    data = Counts.findOne(); 
    if(data){ 
     console.log("I client,Current room "+Session.get("roomId")+" has " 
    + data.count + " messages."); 
    //print--->I client,Current room 001 has 1 messages.(now it's ok!) 
    } 
}) 
}); 
0

試着這樣說,這

Counts = new Meteor.Collection("counts-by-room"); /* correct name of the collection */ 
/*... subscribing stuff */ 
Counts.findOne('counts') /* this is the count you published */ 
+0

謝謝,但它不起作用。 – user1662319