我正在尝试使用 Meteor 编写一个 web 应用程序,但我肯定无法理解有关订阅已发布数据集的一些事情。整个应用程序都在github 上(链接到后代的最新提交),但我将尝试在下面进行总结。
我有一个名为 teams 的集合,可供客户端和服务器使用:
Teams = new Meteor.Collection( "teams" );
在服务器上,我想发布所有团队的列表:
Meteor.publish( "allteams", function() { ...
有一个非常简单的光标构成了这个发布的列表:
var handle = Teams.find( {} ).observeChanges({
added: function( id ) {
console.log( "New team added" );
if ( !initializing ) {
console.log( "Telling subscribers it's all change" );
self.added( "teams", id, {} );
self.ready();
}
}
});
客户端订阅该源,当添加元素时,客户端会将引脚添加到地图:
Meteor.autorun( function() {
Meteor.subscribe( "allteams", function() {
console.log( "All teams has been updated" );
// Do more stuff
}
};
最初填充列表时,自动运行运行良好,但如果我向集合中添加另一个元素,则发布者方法会记录说“我注意到这一点”,但订阅者没有任何反应。
上述目的如下:
- 服务器上有一个团队列表,其中包含名称和长/纬度详细信息
- 当客户连接时,他们会收到该团队列表并绘制在地图上
- 如果一个团队被添加到服务器端的列表中,每个客户端都会收到通知,并且地图上会出现一个新的图钉。
就应用程序而言,我可能不需要 pin 来神奇地出现,但这是学习发布和订阅的有用方法,尤其是当我没有正确使用时!最终,“allteams”可能会比整个团队列表更细粒度,所以我想这类似于查看数据。
我错过了一些完全明显的东西吗?
编辑:我解决了并将答案放在下面。tl;博士我根本没有订阅反应式数据源。