Firebase - 实现可撤销 .update() 的正确方法?
Firebase - right way to implement an undoable .update()?
我刚开始学习 Firebase 并注意到任何操作都只是替换数据,这与我在 couchDB 上看到的有点不同。
根据我对他们文档的理解,为了使 .update()
操作的 rollback/undo 成为可能,我会使用 .push()
方法。我的想法是保留 2 个版本的数据,以便我可以查询以前的对象。要启动,需要有一种 FILO 方法,所以我不会存储超过 2 个项目。
第一次写入之前的数据库:
myData
+ someObject
- keyOne : valueOne
- keyTwo : valueTwo
第一次写入后的数据库 ref.child(someObject).update({keyOne:valueOneUpdated})
:
myData
+ someObject
- keyOne : valueOneUpdated
- keyTwo : valueTwo
以上不是我想要的结果,因为我丢失了该项目的先前版本。
第一次写入后的数据库 ref.child(keyOne).push({keyOne:valueOneUpdated})
:
myData
+ someObject
+ keyOne
+ 1k34jh23kj4h : valueOneUpdated
+ 237we8sjkdf8 : valueOne
- keyTwo : valueTwo
呸!
由于没有 pop()
方法来删除此类操作的最后一项,我现在不得不以某种方式弄清楚哪个是第一个,哪个是最后一个。
肯定有一些优雅而直接的方法可以使回滚成为可能,不是吗?我错过了什么?
谢谢。
如果目标是单级撤消,那非常简单。
myData
someObject
keyOne
currentValue: valueOneUpdated
priorValue: valueOne
keyTwo
currentValue: valueTwo
如果 priorValue 节点存在,则允许撤消,并将其值移动到 currentValue,然后删除先前的值。
您可以通过利用 Firebase 中的数组添加多个撤消来扩展此功能
myData
someObject
keyOne
currentValue: valueOneUpdated
priorValues:
0: prior_value_3 //the value just prior to valueOneUpdated
1: prior_value_2
2: prior_value_1
(概念上)最近的 priorValue 在索引 0 处,所以读取它,'pop' 它离开堆栈并将该值写入 currentValue 和 'move' 另一个值。
Firebase 中的数组中实际上没有 'move' 值的函数,因此只需通过代码读取数组,删除第 0 个元素并将数组写回。
总的来说,我不是 Firebase 中数组的超级粉丝,所以还有其他更可扩展的选项,但数组可能适合这个特定的用例。
我刚开始学习 Firebase 并注意到任何操作都只是替换数据,这与我在 couchDB 上看到的有点不同。
根据我对他们文档的理解,为了使 .update()
操作的 rollback/undo 成为可能,我会使用 .push()
方法。我的想法是保留 2 个版本的数据,以便我可以查询以前的对象。要启动,需要有一种 FILO 方法,所以我不会存储超过 2 个项目。
第一次写入之前的数据库:
myData
+ someObject
- keyOne : valueOne
- keyTwo : valueTwo
第一次写入后的数据库 ref.child(someObject).update({keyOne:valueOneUpdated})
:
myData
+ someObject
- keyOne : valueOneUpdated
- keyTwo : valueTwo
以上不是我想要的结果,因为我丢失了该项目的先前版本。
第一次写入后的数据库 ref.child(keyOne).push({keyOne:valueOneUpdated})
:
myData
+ someObject
+ keyOne
+ 1k34jh23kj4h : valueOneUpdated
+ 237we8sjkdf8 : valueOne
- keyTwo : valueTwo
呸!
由于没有 pop()
方法来删除此类操作的最后一项,我现在不得不以某种方式弄清楚哪个是第一个,哪个是最后一个。
肯定有一些优雅而直接的方法可以使回滚成为可能,不是吗?我错过了什么?
谢谢。
如果目标是单级撤消,那非常简单。
myData
someObject
keyOne
currentValue: valueOneUpdated
priorValue: valueOne
keyTwo
currentValue: valueTwo
如果 priorValue 节点存在,则允许撤消,并将其值移动到 currentValue,然后删除先前的值。
您可以通过利用 Firebase 中的数组添加多个撤消来扩展此功能
myData
someObject
keyOne
currentValue: valueOneUpdated
priorValues:
0: prior_value_3 //the value just prior to valueOneUpdated
1: prior_value_2
2: prior_value_1
(概念上)最近的 priorValue 在索引 0 处,所以读取它,'pop' 它离开堆栈并将该值写入 currentValue 和 'move' 另一个值。
Firebase 中的数组中实际上没有 'move' 值的函数,因此只需通过代码读取数组,删除第 0 个元素并将数组写回。
总的来说,我不是 Firebase 中数组的超级粉丝,所以还有其他更可扩展的选项,但数组可能适合这个特定的用例。