收听Firebase中数百名儿童添加的项目

时间:2016-04-15 19:38:57

标签: ios iphone database firebase

我有一个iOS市场应用程序,我正在收听该市场上待售的每件商品的更改。更确切地说,我正在倾听那个项目上的孩子是否会改变或被移除。

问题是我想要在添加孩子时收听。在Firebase上添加子项时监听的特殊之处在于,当您第一次设置侦听器时,您将获得该节点上的所有兄弟节点。

项目上的孩子不是同一项目的列表,因此我无法听到在某个时间戳之后添加的孩子。我在考虑做something like this并忽略那些最初的孩子。这似乎是一个很大的浪费,因为我基本上是从Firebase中取出两次。一次使用FEventTypeValue,一次使用FEventTypeChildAdded

我想要收听的项目是在Feed中加载的项目。它很可能是几百件物品,但可能是成千上万的物品。

你会怎么做?我是否应该忘记所有关于倾听额外孩子的问题,还是有一个合适的解决方案呢?

编辑(添加示例代码):

这就是我在Firebase上获取特定项目的数据的方式。

var ref = new Firebase('https://<your-Firebase>.firebaseio.com');
ref.child('listings/-KB9ZqLZBEskoUihb-yR').once('value', function(snapshot) {
  listing = snapshot.val();
});

在这里,我想听一个新孩子被添加到该项目时:

ref.child('listings/-KB9ZqLZBEskoUihb-yR').on('child_added', function(snapshot) {
  listing[snapshot.key()] = snapshot.val()
});

问题是,监听在该节点上添加的项目会再次获取所有子节点,这似乎是一个巨大的浪费。你会如何处理这种情况?

1 个答案:

答案 0 :(得分:3)

Firebase支持将新添加的子节点检索到特定节点。

这里是firebase documentation for retrieving data,你可能会看一下“已添加儿童”这个&#39;再一节。我只是引用那里的一些重要笔记。

  

对每个现有孩子触发一次child_added,然后再触发一次   每次将新子项添加到指定路径

这个

  

为了进行排序,它还传递了第二个包含的参数   上一个孩子的关键。

你也可以看看这个例子。

// If we wanted to retrieve only the data on each new post added to our blogging app, we could use child_added

// Get a reference to our posts
var ref = new Firebase("https://docs-examples.firebaseio.com/web/saving-data/fireblog/posts");
// Retrieve new posts as they are added to our database
ref.on("child_added", function(snapshot, prevChildKey) {
  var newPost = snapshot.val();
  console.log("Author: " + newPost.author);
  console.log("Title: " + newPost.title);
  console.log("Previous Post ID: " + prevChildKey);
});

仔细查看prevChildKey

因此,您可以通过更改数据库结构suggested here来实现此技巧。但是,我认为你已经拥有了这种排序结构。希望能帮助到你。