首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >理解snapshot.child()

理解snapshot.child()
EN

Stack Overflow用户
提问于 2015-06-30 17:40:31
回答 2查看 20.4K关注 0票数 2

考虑在Firebase快速启动指南(这里)上引用的这个数据结构

代码语言:javascript
复制
{"name": {"first": "Fred","last": "Flintstone"}

文档表示,可以使用以下方法访问从查询中返回的"name“的每个子对象的数据凝固点位置:

代码语言:javascript
复制
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)
});

但是,有一点奇怪的是,当处理下面的行时。

代码语言:javascript
复制
var nameSnapshot = snapshot.child("name");
var name = nameSnapshot.val();

还检索了name.firstname.last。那么,为什么要使用这个快照方法“子()”呢?或者更确切地说,什么时候使用此方法是有益的,因为当您拉出父对象时,Firebase会拉出所有的子对象,或者是否有一种方法可以检索父节点/对象而不提取其子节点/对象?那么这个方法对我来说是有意义的。

如有任何信息,我们将不胜感激!谢谢

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-06-30 18:09:35

是否有一种方法可以检索父节点/对象而不拉它的一些子节点/对象?

Firebase JavaScript API总是检索完整的节点。所以:不,在JavaScript API中没有一种方法可以得到一个浅显的结果/

为什么要使用这种快照方法child()

如果我们把snapshot.child("property")snapshot.val().property做比较的话。DataSnapshot.child()方法返回一个DataSnapshot,您可以从它获得一个refval()方法将快照的值反序列化为JSON。所以,如果你需要的话,你必须建立你自己的裁判。但是它们的价值在很大程度上取决于您的用例,所以“为什么”不是我可以回答的问题。

票数 7
EN

Stack Overflow用户

发布于 2015-06-30 19:31:30

快照是调用时节点中所有内容的确切图片。但是,它包含的内容将根据获取快照的方式而有所不同。

指南中提供的例子是稍微一维的.通常,您不会有一个名为name的节点,只列出一个人。

一个更好的例子是一个名为users的节点,其数据是这样的。

代码语言:javascript
复制
users
  user_id_0
   firstName:
   lastName:
   age:
  user_id_1
   firstName:
   lastName:
   age:

当与Value参数一起使用时,users节点的快照包含节点的所有子节点和每个子节点内的所有数据(在本例中是所有用户及其数据),处理该子节点的块被调用一次。例如,我们使用它读取用户节点中的所有用户,然后遍历用户以获取某些特定数据。我们还使用它进行多参数查询,这些查询不受firebase的直接支持.例如,我们想让所有20岁的用户都叫Elmo。

Add参数每次读取每个子块,对子块调用一次,在本例中为每个用户。通常我们使用它来保持UI tableView的更新(ObjC),因此当一个新的子数据被添加到Firebase时,所有观察的应用程序都会被通知,这样我们就可以更新UI表了。

如果不检索子对象,则无法检索父对象。但是,如果您正在寻找特定的数据块,则如果您知道父对象,则可以直接访问子对象。这样您就可以检索用户/user_id_0/age

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31144859

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档