2017-05-17 72 views
1

我有一個Parse對象(以及一個解析對象數組)。我想對對象進行克隆,但是我嘗試的所有事情都失敗了......因爲更改原始對象屬性也會更改克隆的相應屬性。我曾嘗試使用Parse.Object.clone(),創建新的對象數組,更改爲JSON,然後做一個深層克隆,但沒有任何工作。經過一些研究,我發現了thisthis,但這確實提供了一個真正的解決方案。克隆分析服務器對象

是否沒有好方法克隆Parse對象並使屬性完全分開?

我想本質上有一個'取消'更改按鈕,這將恢復到克隆版本,而不是保存。

回答

2

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方法就好了

+0

謝謝,改變ID是讓這個工作起作用的關鍵。我最終爲ID克隆添加了一個前綴,然後刪除ID,如果我需要恢復克隆版本。 – SimpleOne

0

Parse.Object.clone()發生了什麼?這似乎應該是你想要的。

iOS(可能是android)SDK對對象的恢復方法重置爲上次保存/讀取的時間。請注意,對於javascript中的對象,將它們傳遞給函數會將它們視爲通過引用傳遞,或多或少,因此函數內的更改會更改傳入的對象。有時很有用,有時很煩人。

如果Parse.Object.clone()不工作,我的下一個建議,雖然煩人,但將創建一個新的對象外殼和獲取它/查詢對象,如果你需要包括當你需要「重置「 數據。

+0

我做了一個克隆,然後操縱原始對象,發現克隆已經改變了!從我讀到的內容來看,如果對象具有相同的id,那麼parse將這些屬性視爲共同的。我想查詢是要走的路... :( – SimpleOne