Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/meteor/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Meteor集合已在服务器上更新,但未反映在客户端上_Meteor - Fatal编程技术网

Meteor集合已在服务器上更新,但未反映在客户端上

Meteor集合已在服务器上更新,但未反映在客户端上,meteor,Meteor,我正在尝试创建一个Meteor应用程序,它将内容存储在Meteor集合中,在服务器和客户端之间传递,以便在通过twit包进行异步api调用后显示成功消息 但是,我遇到了一个问题,当我在服务器上更新集合时,更新不会反映在客户端上。我的代码如下: /lib Alerts = new Meteor.Collection("alerts"); /client Template.suggestionForm.events({ "submit form": function (e) {

我正在尝试创建一个Meteor应用程序,它将内容存储在Meteor集合中,在服务器和客户端之间传递,以便在通过twit包进行异步api调用后显示成功消息

但是,我遇到了一个问题,当我在服务器上更新集合时,更新不会反映在客户端上。我的代码如下:

/lib

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

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());
    })
});
/server

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()不会运行。任何关于为什么会发生这种情况或者我如何让客户倾听收藏中的变化的想法都会非常有用。谢谢大家!

记住在publish()中返回结果游标:

参考:

发布函数可以返回Collection.Cursor,在这种情况下,Meteor将向每个订阅的客户端发布该Cursor的文档。您还可以返回Collection.Cursors数组,在这种情况下,Meteor将发布所有的Cursors

或者,发布函数可以通过调用以下函数直接控制其发布的记录集:添加(向发布的记录集添加新文档)、更改(更改或清除已发布记录集中文档上的某些字段)和删除(从发布的记录集中删除文档)。这些方法由发布函数中的提供

如果发布函数不返回游标或游标数组,则假定它使用低级的添加/更改/删除接口,并且在初始记录集完成后,它还必须调用ready


我从未感到如此愚蠢。非常感谢。
Meteor.publish("alerts", function(){
  return Alerts.find();
});