24

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

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

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

如何只加载新消息,而不加载旧通知历史记录?

4

2 回答 2

38

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

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;
});
于 2013-08-16T23:18:57.787 回答
6

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

一旦触发因为你想打破抓取所有子项目的循环。一旦该循环被打破,您将newItems变量设置为 true,然后它将能够获得所有新的孩子。

如果您之前触发过它,它将破坏目的并获取所有子项,因为您将立即设置newItems变量。

另外,我已经使用了这种方法并且效果很好。

于 2015-11-30T21:54:43.070 回答