订阅管理器在新订阅后不会更新集合

时间:2014-07-18 12:44:05

标签: meteor publish-subscribe

在我的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);

在此之后我看到发布功能运行,但在客户端没有任何反应。 由于某种原因,服务器认为数据没有改变,并决定什么也不做。所以问题是如何告诉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', {...});
 ...

0 个答案:

没有答案