3
dayPath = ref.path.toString() + '/' + configId + '/screens/' + screenIndex + '/days/',
                                // the ref for the days object
                                daysRef = fbutil.ref(dayPath),
                                // the sync for the days object
                                daysSync = fbutil.syncObjectReference(daysRef);

                            // the collection as a $firebase array
                            var list = daysSync.$asArray(),
                                items = [],
                                number;
                            console.log(list);
                            list.$add({dummy: 'Test'});

根据文档,当我将 $add 与 $asArray 一起使用时,$add 应该执行“推送”。但相反,它创建了一个哈希键而不是数字索引。

因此,dummy: test 有一个包含哈希键的父级。预期是一个数字索引,我的意思是:数组项。

有人可以给我一些帮助吗?我在这个数据库中只有 1 周的经验。

结果是这个……

 screens
 ...0
 .......days  
 ..........0
 ..........1
 ..........2
 .........-JrT5ZATDELIR3gXAvah
 ................dummy: test
4

2 回答 2

2

AngulareFire 基于 Firebase JavaScript SDK 构建。所以当 AngularFire 的文档说它在push内部使用时,它不是指 JavaScript 的Array.push,而是指Firebase 的push操作。而且 Firebase 会push生成自己的键,它不会生成常规的数组索引。

其原因在Firebase 的有关数组的文档中得到了最好的解释,但基本上归结为:数组在分布式环境中不能很好地工作,因为所有客户端都必须同意array.length才能添加新项目。

所以$firebaseArray.$add会生成一个所谓的push ID。它们是有序的,就像数组索引一样,但可以跨客户端生成而没有冲突的风险。

我注意到您使用的是较旧版本的 AngularFire。我强烈建议您遵循AngularFire 的“官方”快速入门和指南

于 2015-06-10T18:16:07.123 回答
0

我想发表评论,但我还没有足够的声誉,所以我在这里做。

我眼中的解决方案很简单:

代替:

list.$add({dummy: 'Test'});

做:

list[index] = {dummy: 'Test'};
于 2015-06-16T12:50:33.387 回答