在我的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', {...});
...