2017-06-19 209 views
1

我有顯示兩個不同的數據集的一個觀點: 假設proposalDetails和訂單明細。 我繼承了一些試圖將這兩個類作爲成員備份的代碼。參考在奧裏利亞

在下面的評論代碼的問題是,該類功能不被克隆。只有成員。在另一方面保持2班作爲參考,當我來回切換

(proposalDetails和訂單明細之間)的作品就好了是否有一個原因,保持基準是壞的/不正確的做法?

有危險,當我修改proposalDetails,ORDERDETAILS太修改?

switchView(viewName) {  
if (viewName === 'proposal') { 

     //this.orderBackup = JSON.parse(JSON.stringify(this.orderDetails)); 
     //this.orderDetails = JSON.parse(JSON.stringify(this.proposalDetails)); 

     //'Cloning' the member like this does not include all the class functions 
     //I changed it to keep just the reference 

     this.orderBackup = this.orderDetails; 
     this.orderDetails = this.proposalDetails; 

     $('#view_ordered').removeClass('active'); 
     $('#view_proposal').addClass('active'); 

     this.formDisabled = true; 
     return; 
    } 

    this.orderDetails = this.orderBackup; 
} 
+0

這沒有任何意義。如果你改變'orderDetails',你也會改變'orderDetailsBackup'。 –

+0

@fabioLuz感謝您指出了這一點。我更正了示例 – Spiff

回答

1

你問什麼是不特定奧裏利亞可言,比的其實其他奧裏利亞促進對您的視圖模型使用類。我已經使用了JSON技巧來做簡單的類複製,它完成了工作,說實話不是你能做的更糟糕的事情。

值得指出的是Lodash對克隆的對象都深深淺淺,以及一些非常實用的功能。

+0

我想這不是特定於aurelia。但爲什麼我需要克隆呢?當修改proposalDetails時,是否有任何危險,orderDetails也被修改?我更新了我發佈的代碼 – Spiff

+0

帶有Javascript的東西是一切都通過引用傳遞。在大多數情況下,這可能很好。但是在你的情況和我發現自己處於的狀況下,有時你想存儲狀態,然後用它來恢復更改或進行比較。這就是爲什麼像RxJs這樣的解決方案很受歡迎,因爲它們處理狀態並提供不變性(這就是你所追求的)。當你將一個對象分配給一個變量並且改變它時,因爲你只是引用了一個指針,那些指定了該對象的指針就會得到這些變化。這只是一個Javascript設計功能。 –

+0

但我'保存'在this.orderBackup = this.orderDetails ref,修改orderDetails不應該影響orderBackup。在Java中,所有的東西都被refrerence傳遞。但orderBackup不可修改 – Spiff