繁体   English   中英

Meteor DDP:如何在将新文档添加到集合时收到通知

[英]Meteor DDP: How to get notified when a NEW document is added to a Collection

我正在编写一个软件,通过DDP连接到Meteor服务器来读取数据。

我面临的问题是如何区分添加到集合中的新文档和获取已有文档的通知。

当我第一次连接到服务器时,我会收到一系列added消息来填充clientside集合。 我不知道如何区分这些消息,以及稍后出现的消息,表明实时添加了新文档。 当DDP客户端需要重新连接到服务器时,这会变得更糟,此时所有当前文档再次作为added消息发送。

我花了一些时间才真正意识到,但这正是低级发布API的设计目标。 请阅读“另外,发布功能可以...”向下部分,并且应该非常清楚如何仅为真正的新文档发送added消息。 或者提供一个简单的例子:

服务器和客户端:

MyData = new Meteor.Collection("mydata");

客户:

Meteor.subscribe('myPub', myFilter);

服务器:

Meteor.publish('myPub', function(filter) {
  var self = this;
  var initializing = true;

  var handle = MyData.find(filter).observeChanges({
    added: function (id, fields) {
      if (!initializing)
        self.added("mydata", id, fields);
    },
    changed: function(id, fields) {
      self.changed("mydata", id, fields);
    },
    removed: function (id) {
      self.removed("mydata", id);
    }
  });
  initializing = false;
  self.ready();

  self.onStop(function () {
    handle.stop();  // v. important to stop the observer when the subscription is stopped to avoid it running forever!
  });
});

UPDATE

这是如此根本我实际上写了一篇关于它的博客文章

我过去遇到过这个问题并找到了解决方案。 在第一次渲染时设置变量并在初始观察后更改变量 - 示例:

var initializing = true;

var handle = Collection.find().observe({
  added: function (item) {
    if (!initializing)
        // do stuff with newly added items, this check skips the first run
  }
});

initializing = false;

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM