ObserveChanges'添加了'回调所有项目,甚至是db中已经存在的项目

时间:2014-08-31 13:48:48

标签: javascript meteor

我有页面上的项目列表,我想在集合中添加用于检测插入的侦听器。

以下代码位于客户端。

Messages.find().observeChanges({
    added: function(){
        console.log('Message added');
    }
});

但是如果在集合中已存在项目,则在加载页面之后将触发所有项目的回调。为什么对已经收集的项目以及如何只检测真正的新插入项,为已添加的'已添加'进行了回调?

2 个答案:

答案 0 :(得分:0)

有两种解决方案。对于第一个,请查看此处:https://github.com/oortcloud/unofficial-meteor-faq#why-does-observe-fire-a-bunch-of-added-events-for-existing-documents

第二个是:

var isInitial = true

Messages.find().observeChanges({
    added: function(){
        if(!isInitial){
            console.log('Message added');
        }
    }
});

isInitial = false

这样做是因为对observeChanges的调用会在返回之前触发Minimongo中已有文档的添加回调(并且isInitial将设置为false)。

答案 1 :(得分:0)

您可以尝试使用可以完全按照自己的意愿执行的集合挂钩:

https://atmospherejs.com/mrt/collection-hooks

不幸的是,此软件包尚未更新,无法与Meteor 0.9及更高版本配合使用。