2015-12-03 41 views
3

我正在嘗試創建一個Meteor應用程序,該應用程序將內容存儲在Meteor集合中,以在服務器和客戶端之間傳遞,以在通過twit的異步API調用之後顯示成功消息包。在服務器上更新流星收集,未在客戶端反映

但是,我遇到了一個問題,即當我更新服務器上的集合並且更新未反映在客戶端上時。我的代碼如下:

/lib目錄

Alerts = new Meteor.Collection("alerts"); 

/客戶端

Template.suggestionForm.events({ 
    "submit form": function (e) { 
     return Meteor.call('submitMessage', message); 
    } 
}); 
Meteor.subscribe('alerts'); 
Meteor.startup(function() { 
    Tracker.autorun(function() { 
     console.log(Alerts.find()); 
    }) 
}); 

/服務器

Fiber = Npm.require('fibers') 
Twit = new TwitMaker({ 
    consumer_key: '...', 
    consumer_secret: '...', 
    access_token: '...', 
    access_token_secret: '...' 
}); 
Meteor.publish("alerts", function(){ 
    Alerts.find(); 
}); 
Meteor.methods({ 
    submitMessage: function(message) { 
     this.unblock(); 
     Twit.post('statuses/update', { 'status': message }, function(err, data, response) { 
      Fiber(
       Alerts.remove({}); 
       Alerts.insert({response: err}); 
      ).run(); 
     })); 
    } 
}); 

當我子調用函數調用的表單並更新集合,但是Tracker.autorun()不運行。任何想法爲什麼會發生這種情況,或者我如何讓客戶端監聽收藏集中的更改將會非常有幫助。謝謝!

回答

1

記住返回而產生光標在發佈():

Meteor.publish("alerts", function(){ 
    return Alerts.find(); 
}); 

參考:http://docs.meteor.com/#/full/meteor_publish

發佈功能可以返回Collection.Cursor,在這種情況下,流星將發佈光標文件到每個訂閱的客戶端。你也可以返回一個Collection.Cursors數組,在這種情況下Meteor將會發布所有的遊標。

或者,發佈功能,可直接控制其公佈的記錄通過調用添加的功能設置(以添加新文檔到已發佈的記錄集),改變(改變或清除一些文檔中的字段已經存在於已發佈的記錄集中),並被刪除(從已發佈的記錄集中刪除文檔)。這些方法由你的發佈函數提供。

如果發佈函數未返回遊標或遊標數組,則假定它正在使用低級別的已添加/已更改/已移除的接口,並且它必須在初始記錄集完成後調用就緒。

+0

我從來沒有覺得這麼笨。謝謝! – Josh

相關問題