1

我有这棵树:

root/companyId/customers 和 root/companyId/orders

并且低于 3 位客户,例如

根/companyId/customers/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);
}];

在根/公司。

我需要知道表格何时更改以及记录。

但是,FEventTypeChildChanged即使只有 1 个客户更改,也请给我完整的子树。FEventTypeChildRemoved仅在删除客户树时触发,而不是在删除单个客户时触发。FEventTypeChildChanged删除时触发,但不显示删除的记录,而是显示没有删除记录的完整子树。添加新记录时也会触发,但FEventTypeChildAdded不会触发。

如果我只监视“客户”树并更改单个值,请在 FEventTypeChildChanged 中获取整个客户列表。我只想要改变的单一记录。

所以,很明显我不明白这是怎么接线的。我想获得关于添加、更改、删​​除事件的每条记录的通知,而不是获取整个子树并重新处理已经同步的数据(类似于 firebase 仪表板的工作方式)。

4

1 回答 1

4

child_* 事件仅适用于节点的直接子节点。如果你在 /a 上附加一个监听器,然后 /a/b 被添加,你会得到一个 child_added 事件。但是,如果 /a/b 已经存在,并且您添加 /a/b/c,您将只会收到 child_changed 事件,因为您只在 /a 处收听,而 /a/b 没有添加,它被改变了。

如果您想确切地知道发生了什么变化,那么您应该在您关心的点添加额外的侦听器。在这种情况下,位于 /a 和 /a/* 处。Firebase 旨在允许附加非常大量(数千)的侦听器。

Forge 通过在树中的每个级别附加侦听器来工作。这样我们就可以确切地知道每个级别发生了什么变化。

于 2013-05-30T16:30:49.147 回答