2015-12-03 94 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

相关问题