【发布时间】:2018-04-10 18:02:02
【问题描述】:
每次我使用具有相同值和属性的相同对象 (s3) 进行更新时,Firebase 都会触发事件“child_added”,即使没有要添加或更新的内容。 我通过在 firebase 控制台上修改主对象的子集合中的一些值进行了一些测试,并注意到它返回了第一个元素正确的快照,然后集合的所有其他元素作为“添加”元素。这不是真的,因为除了我执行操作的集合之外,集合没有改变。
我只需要当我发送存储在数据库中的相同对象时,firebase 会智能地识别出没有请求任何操作并且不需要激活触发器。
var studentiRef = ref.child('studenti/' + s3.matricola);
studentiRef.update(JSON.parse(JSON.stringify(s3)));
studentiRef.on("child_changed", function(userSnapshot) {
var tasseRef = userSnapshot.ref.child('tasse');
tasseRef.on('child_added', function(itemSnapshot, prevKey){
console.log('ADDED ON');
console.log(itemSnapshot.key)
})
});
studentiRef.on("child_changed", function(userSnapshot) {
userSnapshot.ref.child('tasse').on('child_removed', function(itemSnapshot, prevKey){
console.log('REMOVED ON');
console.log(itemSnapshot.key)
})
});
studentiRef.on("child_changed", function(userSnapshot) {
userSnapshot.ref.child('tasse').on('child_changed', function(itemSnapshot, prevKey){
console.log('CHANGED ON');
console.log(itemSnapshot.key)
})
});
更新:
在发布更新之前,我做了一些实验,但没有成功。 这里是控制台、数据库和代码的图片。 对此发疯。 这里三张截图:1firebase data2snippet3console log
更新二: scenario
behaviours on modifying value in firebase
已解决: 通过从 github firebase 示例中获得灵感,我发现了使用 firebase 的一个常见错误:我没有对数据进行扁平化。 要继续使用我的数据结构(对象列表中的根对象),解决方案是触发每个对象的更新(伪代码: ref.update(root/childobject) n 次而不是 ref.update(root) . 如果其他人遇到这个问题,我会更好地解释。 始终,平整您的数据! (使用火力基地)
【问题讨论】:
-
请粘贴 firebase 控制台的快照并显示您正在更新的对象,似乎您正在更新根对象,然后在根的子对象上运行
child_changed事件,因此如果您只想获取更新的值获取对studentiRef的子节点的引用并更新它 -
我附上了三张截图
标签: javascript firebase firebase-realtime-database triggers