克隆解析服务器对象
Posted
技术标签:
【中文标题】克隆解析服务器对象【英文标题】:Clone Parse Server object 【发布时间】:2017-05-17 21:07:16 【问题描述】:我有一个 Parse 对象(嗯,一个解析对象数组)。我想克隆对象,但我尝试的一切都失败了……因为更改原始对象属性也会更改克隆的相应属性。我尝试使用 Parse.Object.clone(),创建新的对象数组,更改为 JSON,然后进行深度克隆,但没有任何效果。经过一些研究,我遇到了this 和this,但这确实提供了一个真正的解决方案。
有没有好的方法可以克隆 Parse 对象并让属性完全分离??
我想基本上有一个“取消”更改按钮,它会恢复到克隆版本而不是保存。
【问题讨论】:
【参考方案1】:Parse.Object.clone
返回一个浅拷贝。对于深拷贝(完全独立的对象),我编写并使用了以下代码:
var originalObject = ...
var objectJSON = originalObject.toJSON();
delete objectJSON.objectId; // force it to be a new DB object if you save it
var twin = new Parse.Object( object.className );
twin.set( objectJSON );
在我看来 Parse.Object.deepClone 方法会很好......
【讨论】:
谢谢,更改 ID 是让它工作的关键。我最终为要克隆的 ID 添加了一个前缀,然后如果我需要恢复到克隆版本,则删除该 ID。【参考方案2】:Parse.Object.clone() 发生了什么?这似乎应该是你想要的。
ios(可能还有 android)SDK 对对象有一个 revert 方法,可以重置为上次保存/获取的时间。
请记住,对于 javascript 中的对象,将它们传递给函数会或多或少地将它们视为通过引用传递,因此函数内的更改会改变传入的对象。有时有用,有时很烦人。
如果 Parse.Object.clone() 不起作用,我的下一个建议虽然很烦人,但如果您需要“重置”时需要包含,则创建一个新的对象外壳并获取它/查询该对象数据。
【讨论】:
我做了一个克隆然后操作原来的对象,发现克隆也变了!!根据我的阅读,如果对象具有相同的 id,则 parse 将属性视为常见。我想查询是要走的路……:(以上是关于克隆解析服务器对象的主要内容,如果未能解决你的问题,请参考以下文章
原生JavaScript实现对象的混合与克隆效果,带完整版解析代码[helpers.js]