gpt4 book ai didi

firebase - AngularFire 访问子元素方法

转载 作者:行者123 更新时间:2023-12-04 23:52:23 25 4
gpt4 key购买 nike

我正在寻找一种方法来获取子元素的方法,而不是单独加载该元素。

假设我有一个 Post 模型,每个帖子都有评论。这就是我获得帖子模型的方式:

var post = $firebase(new Firebase(FIREBASE_URL + "/posts/" + post_name)).$asObject();

每个帖子都有评论,所以我可以使用以下方式访问评论:

post.$loaded(function () {
var comments = post.comments;
}

现在如何将新元素推送到评论中,而不必从 Firebase 单独加载模型?我应该能够执行以下操作,但它不起作用:

comments.$add({text: "Hi, there"});

是否有任何正确的方法来获取子元素的 firebase 方法,而无需返回到服务器并获取评论?

最佳答案

Firebase 只会从服务器加载一次数据。之后,您的 JavaScript 代码可以根据需要在其上构造任意数量的引用,而无需再次下载数据。

但是 post.comments.$asArray() 将不起作用,因为您的帖子是一个普通的 JavaScript 对象(不再是 $firebase 同步)。

改为尝试:

var ref = new Firebase(FIREBASE_URL + "/posts/" + post_name);
var post = $firebase(ref).$asObject();
var comments = $firebase(ref.child("comments")).$asArray();

考虑另一种数据结构

但是您可能需要重新考虑您的数据结构。尽管 Firebase 是分层数据存储,但他们建议不要构建深度嵌套的层次结构。请参阅 https://www.firebase.com/docs/web/guide/structuring-data.html 上的避免嵌套

Because we can nest data up to 32 levels deep, it's tempting to think that this should be the default structure. However, when we fetch data for a node in Firebase, we also retrieve all of its child nodes. Therefore, in practice, it's best to keep things as flat as possible, just as one would structure SQL tables.

因此在您的情况下,这可能会导致有两个顶级元素 postscomments

root
posts
post1
post2
comments
post1
post1comment1
post1comment2

然后您可以简单地加载帖子及其评论:

var root= new Firebase(FIREBASE_URL);
var post = $firebase(root.child("posts").child(post_name)).$asObject();
var comments = $firebase(root.child("comments").child(post_name)).$asArray();

关于firebase - AngularFire 访问子元素方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26230921/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com