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

我面临的问题是弄清楚如何区分添加到集合中的新文档和有关已经存在的文档的通知。

当我第一次连接到服务器时,我得到了一系列的added消息来填充客户端集合。我不知道如何区分这些消息和随后出现的消息,这些消息指示实时添加了新文档。当DDP客户端需要重新连接到服务器时,情况变得更糟,这时所有当前文档都再次作为added消息发送。

最佳答案

花了我一段时间才能真正实现,但这正是low-level publish 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!
  });
});

更新

这是如此基础,我实际上已经为此写了一个blog post

关于javascript - meteor DDP : How to get notified when a NEW document is added to a Collection,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/25045783/

10-09 13:47