考虑 Firebase 快速入门指南 (here) 中引用的这个数据结构
{"name": {"first": "Fred","last": "Flintstone"}
文档说可以使用以下方法访问从查询返回的“name”的每个子对象的数据快照位置:
var ref = new Firebase("https://docs-examples.firebaseio.com/samplechat/users/fred");
ref.once("value", function(snapshot) {
var nameSnapshot = snapshot.child("name");
var name = nameSnapshot.val();
name === { first: "Fred", last: "Flintstone"}
var firstNameSnapshot = snapshot.child("name/first");
var firstName = firstNameSnapshot.val();
firstName === "Fred"
var lastNameSnapshot = snapshot.child("name").child("last");
var lastName = lastNameSnapshot.val();
lastName === "Flintstone"
var ageSnapshot = snapshot.child("age");
var age = ageSnapshot.val();
age === null (because there is no "age" child in the data snapshot)
});
但是当处理以下行时,这有点奇怪。
var nameSnapshot = snapshot.child("name");
var name = nameSnapshot.val();
name.first 和 name.last 也被检索。那么为什么要使用这种快照方法“child()”呢?或者更确切地说,什么时候使用此方法会有好处,因为当您拉动父对象时,Firebase 会拉动所有子对象,或者是否有一种方法可以检索父节点/对象而不拉动其中的一些子对象?那么这个方法对我来说就有意义了。
任何信息将不胜感激!谢谢
最佳答案
is there a way to retrieve a parent node/object without pulling some of it's children?
Firebase JavaScript API 始终检索完整的节点。所以:不,JavaScript API 中没有办法获得浅表结果/
why would one use this snapshot method
child()
?
如果我们比较 snapshot.child("property")
和 snapshot.val().property
。 DataSnapshot.child()
方法返回一个DataSnapshot
,您可以从中再次获取一个ref
。 val()
方法将快照的值反序列化为 JSON。因此,如果您需要,则必须构建自己的 ref。但是每个的值(value)在很大程度上取决于您的用例,所以“为什么”不是我可以为您回答的问题。
关于javascript - Firebase 理解 snapshot.child(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31144859/