2017-06-19 88 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