gpt4 book ai didi

javascript - Firebase:如何从快照对象中提取值?

转载 作者:数据小太阳 更新时间:2023-10-29 04:38:37 25 4
gpt4 key购买 nike

我是 Firebase 的新手,我在尝试从快照对象中提取属性时遇到了麻烦。根据文档,我应该能够通过这种方式直接选择对象的内容:

snapshot.val().property_name

但是,每次我尝试这样做时,我都会得到一个“未定义”值。是的,我知道名称是正确的并且该属性有内容。

如果我这样做:

MyRoom.update({Marker1:'foo'});

MyRoom.on('child_added', function(snapshot)
{
alert(snapshot.name()); // it returns Marker1
alert(snapshot.val()); // it returns foo
});

但如果相反,我尝试:

MyRoom.update({Marker1:'foo'});

MyRoom.on('child_added', function(snapshot)
{
alert(snapshot.val().Marker1); // it returns undefined
});

我做错了什么?

最佳答案

tl;博士;你应该为你的情况使用 MyRoom.on('value',

您通常在 Firebase 中存储两种基本类型的数据:

  • 对象
  • 收藏

对象

您通常像这样存储的对象:

var MyRoom = new Firebase('your.firebaseio.com/someroom');
MyRoom.set({Name: 'This is my room', Owner: 'frank', Marker1:'bar'});

如果你想更新/修补一个对象,你可以按照上面的方法做:

MyRoom.update({Marker1:'foo'});

要监听这个特定房间的变化,您可以使用:

MyRoom.on('value', function(snapshot) {
var val = snapshot.val();
alert(JSON.stringify(val)); // {Name: 'This is my room', Owner: 'frank', Marker1:'foo'}
alert(val.Marker1); // foo
});

在这里您始终可以获得整个对象,即使您更新了它的单个属性也是如此。

收藏

集合是对象的列表。但集合本身也是对象,因此您可以使用 on('value' 监视集合。但这意味着您必须不断地处理整个数组,这通常是不切实际的。

您通常会处理集合中的单独条目。 Firebase 有特定事件用于添加/删除/更新集合。因此,要监听添加到集合中的新项目,您可以:

var MyRooms = new Firebase('your.firebaseio.com/rooms');
MyRooms.push({Name: 'This is my room', Owner: 'frank', Marker1:'bar'});

MyRooms.on('child_added', function(snapshot) {
alert(snapshot.val());
});

集合是对象是集合是对象是...

您的困惑源于您混合了上面的集合逻辑和对象逻辑。虽然这通常不是您想要的,但它是完全有效的代码,这就是它执行的原因;只是不是您想要的结果。

如何使用“将对象视为集合”的示例:

var MyRoom = new Firebase('your.firebaseio.com/someroom');

MyRoom.update({Marker2:'snafu'});

MyRooms.on('child_added', function(snapshot) {
// somebody added a property to MyRoom
});

您可能希望“像对待对象一样对待集合”的示例:https://stackoverflow.com/a/25551254/209103

关于javascript - Firebase:如何从快照对象中提取值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25538400/

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