Hol*_*bæk 6 database iphone ios firebase
我有一个iOS市场应用程序,我正在收听该市场上待售的每件商品的变化.更确切地说,我正在听取该项目上的孩子是否会改变或被移除.
问题是我想要在添加孩子时收听.在Firebase上添加子项时监听的特殊之处在于,当您第一次设置侦听器时,您将获得该节点上的所有兄弟节点.
项目上的孩子不是同一项目的列表,所以我不能听一些时间戳后添加的孩子.我正在考虑做这样的 事情并忽略那些最初的孩子.这似乎是一个很大的浪费,因为我基本上是从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();
});
Run Code Online (Sandbox Code Playgroud)
在这里,我想听一个新的孩子被添加到该项目时:
ref.child('listings/-KB9ZqLZBEskoUihb-yR').on('child_added', function(snapshot) {
listing[snapshot.key()] = snapshot.val()
});
Run Code Online (Sandbox Code Playgroud)
问题是,监听在该节点上添加的项目会再次获取所有子节点,这似乎是一个巨大的浪费.你会如何应对这种情况?
当然,Firebase 支持将新添加的子节点检索到特定节点。
这是用于检索数据的 firebase 文档,您可以再次查看“添加的子项”部分。我只是引用其中的一些重要注释。
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);
});
Run Code Online (Sandbox Code Playgroud)
仔细看看prevChildKey
因此,在这里您可以通过稍微更改数据库结构来实现此技巧(此处建议)。但是,我认为您已经有了这种订购结构。希望能帮助到你。
| 归档时间: |
|
| 查看次数: |
744 次 |
| 最近记录: |