meteor中的cursor.observe({added})行为

时间:2012-04-18 21:46:56

标签: meteor

我正在尝试在将数据添加到数据库时向用户显示警报。所以我写了(在客户端):

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

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

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

1 个答案:

答案 0 :(得分:13)

您正在观察客户端数据库的游标,并且该数据库可能无法在页面加载完成之后完成同步,因此该行为是有意义的。您可能希望查看明确订阅集合,如this question的答案中所述。

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

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