2012-04-18 53 views
9

我试图在数据添加到数据库时向用户显示警报。所以我写了(在客户端):Meteor中的cursor.observe({added})行为

Meteor.autosubscribe(function() { 
    ItemCollection.find().observe({ 
    added: function(item) { 
     // Alert code 
    } 
    }); 
}); 

而且我发现,当一个新的项目添加到服务器端数据库(我想是正常的:)),但警报显示,不仅警报当我刷新页面时,也会显示每个以前添加的项目。我猜想Meteor会在启动时从Mongo数据库中获取所有数据(以填充本地Minimongo数据库),然后触发本地数据库中添加的每个项目的“添加”事件。

但这是正常的行为?我如何才能只接收服务器上数据库中“真正”添加的项目?

回答

13

您正在观察客户端数据库的游标,并且该数据库可能无法完成同步,直到页面完成加载后,因此这种行为才有意义。您可能需要查看this question答案中讨论的显式订阅集合。

如果您的数据有created_at字段,那么您可以观察页面加载后创建的项目。

ItemCollection.find({created_at : {$gt: some_current_time}}).observe({ 
    added: function(item) { 
     // Alert code 
    } 
    }); 
+0

谢谢你的帮助,这正是我需要的!我会试试这个! – TiuSh 2012-04-23 22:17:45

+0

太棒了!我很高兴听到它的帮助。 – lashleigh 2012-04-24 02:17:47

+0

另请参阅此问题的答案:http://stackoverflow.com/questions/21355802/meteor-observe-changes-added-callback-on-server-fires-on-all-item – 2014-09-27 12:47:06