如何只检索新数据?

时间:2013-08-16 10:17:00

标签: firebase

我正在尝试为我的网站管理员创建简单的通知系统,我只需要向每个管理员用户发送实时消息。但是当我使用firebase时,它会在每个页面上加载旧数据,并且用户可以看到来自数据库的所有消息。如果我设置limit(1),用户将在每个页面重新加载时看到最后一个通知:

var eventsList = new Firebase('https://*****-messages.firebaseio.com/');

eventsList.on('child_added', function(message) {
    var message = message.val();
    $.notification(message.message);
});

如何在没有旧通知历史记录的情况下仅加载新邮件?

2 个答案:

答案 0 :(得分:36)

这是设计的,在实时系统中,没有“最新”数据的概念,因为它总是在变化。但是,如果您只想在页面加载后显示添加到列表的项目,您可以执行以下操作:

var newItems = false;
var eventsList = new Firebase('https://*****-messages.firebaseio.com/');

eventsList.on('child_added', function(message) {
  if (!newItems) return;
  var message = message.val();
  $.notification(message.message);
});
eventsList.once('value', function(messages) {
  newItems = true;
});

答案 1 :(得分:6)

我会对上述内容发表评论,但由于声誉我不能,所以希望这是足够的,这是为了解决Gruff McGruff最后的评论。

在之后触发,因为你想要摆脱抓住所有子项的循环。一旦该循环被破坏,您将 newItems 变量设置为true,然后它将能够获得所有新的子项。

如果您之前解雇了它,它将失败目的并抓住所有子项目,无论您是否立即设置 newItems 变量。

另外,我使用过这种方法,效果很好。