流星DDP:当一个新文档被添加到集合中时,如何获得通知
Meteor DDP: How to get notified when a NEW document is added to a Collection
我正在编写一个通过DDP连接到流星服务器读取数据的软件。
我面临的问题是弄清楚如何区分添加到集合中的新文档和获得关于已经存在的文档的通知。
当我第一次连接到服务器时,我得到一系列added
消息来填充客户端集合。我不知道如何区分这些消息和后来出现的消息,这些消息表明新文档已被实时添加。当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!
});
});
这是非常基本的,我已经写了一篇关于它的博文。
我过去遇到过这个问题,并找到了解决方案。在第一次渲染时设置一个变量,并在初始观察后更改变量-示例:
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;
相关文章:
- Meteor-将选定窗体中的对象添加到集合中
- 将css属性添加到对象的集合中
- 添加/更改模型后重新影响和渲染集合
- 主干.js绑定到集合“添加”呈现视图两次
- MongoDB:如何将这个散列添加到集合中的每个文档中
- 如何在集合中添加集合
- 如何将中的两个geoJSON功能集合添加到两个层组中
- 主干:从集合视图向集合添加模型
- 向扩展数组的JS集合添加对象(继承?)
- 为什么我的骨干.js集合重置只是添加 1 个模型
- Lodash:如何向集合中的所有值添加新字段
- Accounts.onCreateUser 未将字段添加到 Meteor 的用户集合中
- 如何按顺序将类添加到元素集合
- 流星 - 将投票添加到集合中的特定 ID
- 主干.js:仅添加来自 JSON 集合获取的新模型
- 主干:集合将随机模型添加到自身
- 将模型添加到木偶项视图定义之外的主干集合
- 瓦坎达添加集合
- 如何在javascript中添加集合中的动态项
- 在集合中添加集合