【发布时间】:2016-04-15 19:38:56
【问题描述】:
我有一个 iOS 市场应用程序,我在该应用程序中监听在该市场上出售的每件商品的变化。更准确地说,我正在倾听该项目上的孩子是否改变或被移除。
问题是我也想听听何时添加了孩子。在 Firebase 上添加子节点时进行监听的特殊之处在于,当您第一次设置监听器时,您会获得该节点上的所有兄弟节点。
一个项目上的孩子不是同一项目的列表,所以我无法监听在某个时间戳之后添加的孩子。我正在考虑做something like this 并忽略那些最初的孩子。这似乎是一个很大的浪费,因为我基本上是从 Firebase 获取东西两次。一次是FEventTypeValue,一次是FEventTypeChildAdded。
我要收听的项目是在提要中加载的项目。它很可能是几百个项目,但也可能是数千个项目。
你会怎么做呢?我应该忘记所有关于倾听添加的孩子的事情还是有一个不错的解决方案?
编辑(添加示例代码):
这就是我在 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()
});
问题是监听该节点上添加的项目会再次获取所有子节点,这似乎是一种巨大的浪费。你会如何处理这种情况?
【问题讨论】:
-
这里描述代码和数据的文字太多了。请提供重现您所询问情况的实际代码和 JSON(作为文本,无屏幕截图)。见MCVE。
-
'listings/-KB9ZqLZBEskoUihb-yR' 是特定项目吗?是否有子节点被添加到 within 节点中,或者您是否正在寻找要与 listings 节点一起添加的其他项目。一些 Firebase 结构真的可以帮助我们,也许可以澄清一些问题。
-
'listings/-KB9ZqLZBEskoUihb-yR' 是一个特定项目,我想听听何时将儿童添加到该特定项目。
-
为什么不能只观察 .ChildAdded、.ChildChanged 和 .ChildRemoved?您是正确的,当添加 .ChildAdded 侦听器时,它会遍历所有子级,但我认为您希望它填充您的 UI。忽略比您提到的时间戳更早的那些并添加之后的那些。您甚至可以设置 .childAdded 查询以仅检索晚于时间戳的节点。您发布的代码也是重复的工作。只需使用 .childAdded ,它将在相关节点中读取,您不需要两者。 (也检查你的语法)
-
我没有为某个节点上的每个子属性设置时间戳。所以我不能听一段时间后添加的孩子!我完全理解我可以收听我的孩子后添加的孩子。我的问题是我将两次获取相同的属性。那有意义吗?您了解案例和问题吗?
标签: ios iphone database firebase