我有这棵树:
root / companyId / customers和root / companyId / orders
以及3个以下的客户,如
根/ companyId /客户/ IdCustomer / CustomerData
我附上所有事件:
[sharedInstance.root observeEventType:FEventTypeChildChanged withBlock:^(FDataSnapshot *snapshot) {
NSLog(@"Data get: %@", snapshot.value);
}];
[sharedInstance.root observeEventType:FEventTypeChildRemoved withBlock:^(FDataSnapshot *snapshot) {
NSLog(@"Removed: %@", snapshot.value);
}];
[sharedInstance.root observeEventType:FEventTypeChildAdded withBlock:^(FDataSnapshot *snapshot) {
NSLog(@"Added: %@", snapshot.value);
}];
在root / company。
我需要知道表格何时更改,以及记录。
但是,即使只有1位客户更改,FEventTypeChildChanged
也会为我提供完整的子树。 FEventTypeChildRemoved
仅在删除客户树时触发,而不是在删除单个客户时触发。 FEventTypeChildChanged
在删除时触发,但不显示已删除的记录,但不显示已删除记录的完整子树。添加新记录时也会触发,但FEventTypeChildAdded
不会触发。
如果我只监控"客户"树和更改单个值,获取整个客户列表 FEventTypeChildChanged。我只想要改变单个记录。
所以,很明显我不明白如何连线。我想获得每个表的每个记录的添加,更改,del事件的通知,而不是获取整个子树并重新处理已经同步的数据(类似于firebase仪表板的工作方式)。
答案 0 :(得分:4)
child_ *事件仅适用于节点的直接子节点。如果你在/ a附加一个监听器,然后添加/ a / b,你将得到一个child_added事件。但是,如果/ a / b已经存在,并且您添加/ a / b / c,则只会收到child_changed事件,因为您只在/ a处收听,并且未添加/ a / b,它被改变了。
如果您想确切知道更改的内容,那么您应该在您关注的点添加其他侦听器。在这种情况下,在/ a和/ a / *。 Firebase旨在允许附加大量(数千)听众。
Forge通过在树中的每个级别附加侦听器来工作。这样我们就知道每个级别的确切变化。