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_Publish Subscribe - Fatal编程技术网

Meteor 订阅管理器没有';在新订阅后更新集合

Meteor 订阅管理器没有';在新订阅后更新集合,meteor,publish-subscribe,Meteor,Publish Subscribe,在我的Meteor应用程序中,我有这样一种情况,即我只有在客户端上有一个“设置”集合。因此,发布功能是: Meteor.publish('settings', function (option) { this.added("settings", "settings", { bar: true, foo: { .... } }); this.ready(); }); 起初,我喜欢: waintOn: function () {

在我的Meteor应用程序中,我有这样一种情况,即我只有在客户端上有一个“设置”集合。因此,发布功能是:

Meteor.publish('settings', function (option) {

    this.added("settings", "settings", {
        bar: true,
        foo: { .... }
    });

    this.ready();
});
起初,我喜欢:

waintOn: function () {
    return subs.subscribe('settings')
}
但当路线改变时,我会再次订阅

return subs.subscribe('settings', 10);
在此之后,我看到publish函数运行,但在客户端上什么也没有发生。 出于某种原因,服务器认为数据没有更改,并决定不执行任何操作。所以问题是我如何告诉Meteor数据已经改变,所以它会将数据发送到客户端。如果问题完全不同,我也很感兴趣

更新:发布功能可能如下所示:

Meteor.publish('settings', function (option) {
    var list;

    if (option === 10) {
       list = [1,2,3,4,5];
    }

    this.added("settings", "settings", {
        bar: true,
        foo: list
    });

    this.ready();
});
更新2:预期的解决方案:

var isNew = true;
Meteor.publish('settings', function () {

    if(isNew) {
        this.added("settings", "settings", {
            bar: true,
            foo: list
        });
        isNew = false;
    }
    else {
        this.changed('settings', 'settings', {.....});
    }

    this.ready();
});
如果有一个类似于
this.exists('settings','settings')
的函数就更好了,因为
isNew
变量感觉有点像黑客

无论如何,我现在的工作方式如下:

 try { 
     this.removed('settings', 'settings');
 } catch(e){}

 this.added('settings', 'settings', {...});
 ...

选项
参数的作用是什么?换句话说,
subscribe('settings')
subscribe('settings',10)
有多大不同?在我的应用程序中,这意味着如果定义了
选项,将添加一个数组,但这会如何影响订阅中定义的数据?你能更新你的问题吗?我已经用一个例子更新了这个问题,
10
如何影响输出。正如您所见,我创建了一个无用的数组,但在我的应用程序中,我加载了文档并从itI中提取了一些数据,我找到了解决方案。您不能在同一文档上多次使用添加的
(请注意,“设置”是此虚拟文档的id)。相反,您应该在之后使用
changed
。我找到了解决办法