gpt4 book ai didi

meteor - 使用 autorun 订阅响应式(Reactive)数据源

转载 作者:行者123 更新时间:2023-12-04 22:14:00 25 4
gpt4 key购买 nike

我正在尝试使用 Meteor 编写一个 web 应用程序,但我肯定无法理解订阅已发布数据集的内容。整个应用程序都在 github 上(链接到子孙后代的最新提交),但我将尝试在下面进行总结。

我有一个名为 team 的集合,可供客户端和服务器使用:

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

客户端订阅该源,当添加元素时,客户端将向 map 添加图钉:
Meteor.autorun( function() {
Meteor.subscribe( "allteams", function() {
console.log( "All teams has been updated" );
// Do more stuff
}
};

最初填充列表时,自动运行运行良好,但如果我向集合中添加另一个元素,则发布者方法会记录说“我注意到了这一点”,但订阅者中没有任何 react 。

上述目的如下:
  • 服务器上有一个团队列表,其中包含名称和长/纬度详细信息
  • 当客户端连接时,他们会收到团队列表,并将它们绘制在 map 上
  • 如果一个团队被添加到服务器端的列表中,每个客户端都会收到通知,并且 map 上会出现一个新图钉。

  • 就应用程序而言,我可能不需要 pin 来神奇地出现,但它是学习发布和订阅的有用方法,尤其是当我不正确时!最终,“allteams”可能会比整个团队列表更细粒度,所以我想这类似于对数据进行查看。

    我错过了一些完全明显的东西吗?

    编辑:我解决了并在下面给出了答案。 tl;dr 我根本没有订阅响应式(Reactive)数据源。

    最佳答案

    回答我自己的问题可能不礼貌,但我弄清楚我做错了什么,我认为其他人可能会遇到同样的事情。

    简单的答案是我没有做我在问题标题中声称要做的事情,特别是没有订阅响应式(Reactive)数据源。

    Meteor.autorun( function() {
    Meteor.subscribe( "allteams", function() {
    console.log( "All teams has been updated" );
    // Do more stuff
    }
    };

    在这里,我已将 subscribe 方法传递给 autorun ,但该方法本身不是响应式(Reactive)数据源。然而,它返回的东西是!
    // Define a subscription
    var handle = Meteor.subscribe( "foo", { onReady: function() { ... } } );

    Meteor.autorun( function() {
    if ( handle.ready() ) {
    // Now do something every time the subscription is marked as ready
    }
    };

    订阅句柄的 ready 方法是响应式(Reactive)的,因此现在每次更新发布的文档集时都会执行自动运行。这使我对订阅数据库游标并观察更改的多个客户端的效率提出了进一步的问题,但我将在另一个问题中讨论这个问题。

    关于meteor - 使用 autorun 订阅响应式(Reactive)数据源,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15396879/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com