Firebase / AngularFire受限对象在$ save()上删除其属性

时间:2014-10-30 19:40:13

标签: firebase angularfire

我的数据库中有一个名为'questions'的主节点,当我创建一个对该节点的引用并将其作为$ asObject()引入我的项目时,我可以修改单个问题和$ save()集合没有任何问题,但是当我尝试按优先级限制对象时,$ save()会删除对象的所有内容!

这很好用:

db.questions = $firebase(fb.questions).$asObject(); 
// later :
db.questions.$save();
// db.questions is an object with many 'questions', which I can edit and resave as I please

但是只要我将代码切换到此:

db.questions = $firebase(fb.questions.startAt(auth.user.id).endAt(auth.user.id)).$asObject();
// later :
db.questions.$save();
// db.questions is an empty firebase object without any 'questions!'

对于有限的物体(双关语是否有意)以及它们被改变和保存的能力有限制吗?保存实际上将问题的更新保存到数据库,但不知何故核实了本地$ firebase对象......

1 个答案:

答案 0 :(得分:1)

第一行同步数组($asArray)文档:

  

同步数组应该用于任何将被排序,迭代和具有唯一ID的对象列表。

第一行同步对象($asObject)文档:

  

对象可用于存储键/值对,以及不用作集合的单个记录。

如上所示,如果您打算使用集合并使用limit,那么您应该使用专为集合设计的工具(即$ asArray)。

如果您要使用Firebase SDK重新创建$save的行为,它将如下所示:

var ref = new Firebase(URL).limit(10);
// ref.set(data); // throws an error!
ref.ref().set(data); // replaces the entire path; same as $save

因此,此处的行为与SDK完全匹配。从技术上讲,你不能在查询实例上调用set(),这实际上没有任何意义。 limit(10)对JSON对象意味着什么?如果你调用set,应该设置哪10个无序密钥?这里没有相关性,limit()实际上只对数据集合有意义,而不是键/值对列表。

希望有所帮助。